programing

컬렉션에서 선택한 문서의 위치를 가져옵니다 [mongoDB].

muds 2023. 7. 5. 21:04
반응형

컬렉션에서 선택한 문서의 위치를 가져옵니다 [mongoDB].

mongo 컬렉션에서 선택한 문서의 위치(색인)를 얻는 방법은 무엇입니까?

예: 이 문서:db.myCollection.find({"id":12345})인덱스 있음3myCollection

myCollection:
    id: 12340, name: 'G'
    id: 12343, name: 'V'
    id: 12345, name: 'A'
    id: 12348, name: 'N'

주문과 상관없이 문서의 위치를 찾는 것이 필요한 경우, MongoDb는 특정 순서로 문서를 저장하지 않기 때문에 불가능합니다.그러나 일부 필드를 기준으로 인덱스를 알고 싶다면 다음과 같이 말합니다._id이 방법을 사용할 수 있습니다.

의 자동 증분을 엄격하게 따르는 경우_id필드. 그보다 작은 값을 가진 모든 문서를 셀 수 있습니다._idsay n, 그렇다면 n + 1은 다음을 기반으로 한 문서의 색인이 될 것입니다._id.

n = db.myCollection.find({"id": { "$lt" : 12345}}).count() ;

이것은 문서가 컬렉션에서 삭제된 경우에도 유효합니다.

제가 알기로는 이것을 할 수 있는 단일 명령은 없으며, 일반적인 경우에는 불가능합니다(데릭의 답변 참조).단, 사용count()순서 ID 값 필드에서 수행된 쿼리가 작동하는 것 같습니다.경고: 동시 작성자의 경우에는 달성하기 어려운 안정적으로 정렬된 필드가 있다고 가정합니다. 이 예제에서는 단일 라이터 대소문자만 사용할 수 있습니다.:

MongoDB shell version: 2.0.1
connecting to: test
> use so_test
switched to db so_test
> db.example.insert({name: 'A'})
> db.example.insert({name: 'B'})
> db.example.insert({name: 'C'})
> db.example.insert({name: 'D'})
> db.example.insert({name: 'E'})
> db.example.insert({name: 'F'})
> db.example.find()
{ "_id" : ObjectId("4fc5f040fb359c680edf1a7b"), "name" : "A" }
{ "_id" : ObjectId("4fc5f046fb359c680edf1a7c"), "name" : "B" }
{ "_id" : ObjectId("4fc5f04afb359c680edf1a7d"), "name" : "C" }
{ "_id" : ObjectId("4fc5f04dfb359c680edf1a7e"), "name" : "D" }
{ "_id" : ObjectId("4fc5f050fb359c680edf1a7f"), "name" : "E" }
{ "_id" : ObjectId("4fc5f053fb359c680edf1a80"), "name" : "F" }
> db.example.find({_id: ObjectId("4fc5f050fb359c680edf1a7f")})
{ "_id" : ObjectId("4fc5f050fb359c680edf1a7f"), "name" : "E" }
> db.example.find({_id: {$lte: ObjectId("4fc5f050fb359c680edf1a7f")}}).count()
5
> 

쿼리된 필드가 인덱싱된 경우에도 이 작업은 상당히 빨라야 합니다.그 예는 몽고 껍질에 있지만,count()모든 드라이버 리브에서도 사용할 수 있어야 합니다.

이 방법은 매우 느리지만 간단한 방법일 수 있습니다.여기서는 일반적인 쿼리를 전달할 수 있습니다.저는 단지 모든 서류를 루프하고 기록과 일치하는 조건을 확인하고 있습니다._id 필드에서 확인합니다.다른 단일 필드 또는 여러 필드를 사용하여 확인할 수 있습니다.

var docIndex = 0;
db.url_list.find({},{"_id":1}).forEach(function(doc){
  docIndex++;
  if("5801ed58a8242ba30e8b46fa"==doc["_id"]){
    print('document position is...' + docIndex);
    return false;
  }
});

MySQL f.e.가 행 번호를 지정하지 않는 것처럼 MongoDB는 데이터베이스에 문서를 순서대로 보관하지 않기 때문에 이를 반환할 수 없습니다.

오브제jhonkola의 ID 트릭은 오직 한 명의 클라이언트만이 객체와 같이 새로운 요소를 생성하는 경우에만 작동합니다.ID는 클라이언트 측에서 생성되며, 첫 번째 부분은 타임스탬프입니다.서로 다른 클라이언트가 동일한 서버에 통신하는 경우에는 순서가 보장되지 않습니다.여전히, 저는 이것에 의존하지 않을 것입니다.

저 또한 당신이 무엇을 하려고 하는지 잘 이해하지 못합니다, 그래서 당신의 질문에 그것을 언급할 수 있을까요?그런 다음 답변을 업데이트할 수 있습니다.

원하는 위치를 쿼리로 사용하여 데이터베이스 컬렉션(myCollection)을 검색할 때 {'id': 12340, 'name': 'G', 'position': 1}과 같은 항목의 위치를 포함하도록 컬렉션을 재구성합니다.

전체 컬렉션을 반환하는 쿼리는 모두 정렬을 사용하여 재현 가능한 순서인 find.sort.for 각 스크립트를 사용하여 올바른 인덱스를 가져옵니다.

언급URL : https://stackoverflow.com/questions/10813908/get-position-of-selected-document-in-collection-mongodb

반응형