MongoDB
응용 프로그램을 작성 중이며 해당 쿼리에 문제가 있습니다. 매거진을 작성할 때 많은 쿼리를 재 작업 한 후에 이전에 다루었던 쿼리가 더 이상 인덱스에 포함되지 않는다는 것을 발견했습니다. 가능한 한 문제를 격리하기 위해 작업 세트를 추출하려고했지만 여전히 혼란 스럽습니다.MongoDB 인덱스가 간단한 쿼리를 처리하지 않습니다.
먼저, 새로운 (빈) 컬렉션, 나는 다음과 같은 문서에 삽입 : 다음
devdb> db.test.find()
{ "_id" : ObjectId("53157aa0dd2cab043ab92c14"), "metadata" : { "created_by" : "bcheng" } }
{ "_id" : ObjectId("53157aa6dd2cab043ab92c15"), "metadata" : { "created_by" : "albert" } }
{ "_id" : ObjectId("53157aaadd2cab043ab92c16"), "metadata" : { "created_by" : "zzzzzz" } }
{ "_id" : ObjectId("53157aaedd2cab043ab92c17"), "metadata" : { "created_by" : "thomas" } }
{ "_id" : ObjectId("53157ab9dd2cab043ab92c18"), "metadata" : { "created_by" : "bbbbbb" } }
을, 나는 'metadata.created_by'필드에 대한 인덱스를 생성 : 이제
devdb> db.test.getIndices()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "devdb.test",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"metadata.created_by" : 1
},
"ns" : "devdb.test",
"name" : "metadata.created_by_1"
}
]
필드를 기준으로 문서를 검색하려고 시도했습니다.
devdb> db.test.find({'metadata.created_by':'bcheng'},{'_id':0,'metadata.created_by':1}).sort({'metadata.created_by':1}).explain()
{
"cursor" : "BtreeCursor metadata.created_by_1",
"isMultiKey" : false,
"n" : 1,
"nscannedObjects" : 1,
"nscanned" : 1,
"nscannedObjectsAllPlans" : 1,
"nscannedAllPlans" : 1,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"indexBounds" : {
"metadata.created_by" : [
[
"bcheng",
"bcheng"
]
]
},
"server" : "localhost:27017"
}
정확한 색인이 사용되고 있으며 관련없는 d 문서를 스캔하는 중입니다. .hint()
, limit()
또는 sort()
의 존재에 관계없이, indexOnly
은 false
으로 유지됩니다.
문서를 살펴보면 배열 요소에 대한 쿼리를 다루지는 못하지만 여기서는 해당되지 않습니다 (isMultiKey
은 false
).
무엇이 누락 되었습니까? 이 동작에 대한 다른 이유가 있습니까 (예 : 부적합한 RAM, 디스크 공간 등)? 그렇다면 앞으로 어떻게 이러한 문제를 최선으로 진단 할 수 있습니까?
글쎄, 확실히 그 질문에 답합니다. 빠른 답변 감사합니다! –