2014-03-04 26 views
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)。

我錯過了什麼?這種行爲是否還有其他原因(例如,內存不足,磁盤空間等)?如果是這樣,我將來如何最好地診斷這些問題?

回答

1

目前尚不支持。看到這個Jira issue

+0

那麼,那肯定會回答這個問題。感謝您的快速回復! –