0
我正在研究一個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
)。
我錯過了什麼?這種行爲是否還有其他原因(例如,內存不足,磁盤空間等)?如果是這樣,我將來如何最好地診斷這些問題?
那麼,那肯定會回答這個問題。感謝您的快速回復! –