2016-06-15 5 views
1

У меня есть индекс:MongoDB запрос не использует индекс

{ 
    "sourceName" : 1, 
    "addedDate" : 1, 
    "sourceKey" : 1, 
    "appKey" : 1, 
} 

Но когда я пытаюсь сделать

db.myCollection.find({and:[ 
       {sourceName: "mySourceName"}, 
       {addedDate: 1414878162405}, 
       {sourceKey:"mySource Key"}, 
       {appKey: "test"}] 
       }).explain() 

Это показывает курсор BasicCursor т.е. он не использует индекс:

{ 
    "cursor" : "BasicCursor", 
    "isMultiKey" : false, 
    "n" : 0, 
    "nscannedObjects" : 500, 
    "nscanned" : 500, 
    "nscannedObjectsAllPlans" : 500, 
    "nscannedAllPlans" : 500, 
    "scanAndOrder" : false, 
    "indexOnly" : false, 
    ... 
} 

Может кто-нибудь объяснить мне, почему мой запрос не использует определенный индекс?

ответ

2

Ваш объект запроса использует and вместо оператора $and, поэтому он ищет поле с именем 'и' в ваших документах, которое содержит ваши значения запроса.

Но вам не нужно использовать $and в любом случае, так как несколько терминов запроса неявно, так что вы операция AND можете просто сделать:

db.myCollection.find({ 
     sourceName: "mySourceName", 
     addedDate: 1414878162405, 
     sourceKey:"mySource Key", 
     appKey: "test"} 
    }).explain() 

Это должно быть в состоянии использовать свой индекс просто отлично.

+0

Не могу поверить, что я этого не видел. Большое спасибо! – Rthp