컬렉션에서 선택한 문서의 위치를 가져옵니다 [mongoDB].
mongo 컬렉션에서 선택한 문서의 위치(색인)를 얻는 방법은 무엇입니까?
예: 이 문서:db.myCollection.find({"id":12345})
인덱스 있음3
에myCollection
myCollection:
id: 12340, name: 'G'
id: 12343, name: 'V'
id: 12345, name: 'A'
id: 12348, name: 'N'
주문과 상관없이 문서의 위치를 찾는 것이 필요한 경우, MongoDb는 특정 순서로 문서를 저장하지 않기 때문에 불가능합니다.그러나 일부 필드를 기준으로 인덱스를 알고 싶다면 다음과 같이 말합니다._id
이 방법을 사용할 수 있습니다.
의 자동 증분을 엄격하게 따르는 경우_id
필드. 그보다 작은 값을 가진 모든 문서를 셀 수 있습니다._id
say 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
'programing' 카테고리의 다른 글
데이터 소스 'spring.datasource.url'을(를) 자동 구성하지 못했습니다. (0) | 2023.07.05 |
---|---|
postgresql에서 로컬 변수를 선언하는 방법은 무엇입니까? (0) | 2023.07.05 |
node.js의 기존 json 개체에 새 특성 추가 (0) | 2023.07.05 |
UIAertController 텍스트 필드에서 입력 값을 가져오는 방법은 무엇입니까? (0) | 2023.07.05 |
SpringBoot @WebMvcTest, 자동 배선 RestTemplateBuilder (0) | 2023.07.05 |