mongodb查询不使用索引

时间:2016-06-15 19:28:04

标签: mongodb mongodb-query database nosql

我有一个索引:

{
    "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,
    ...
}

任何人都可以解释一下为什么我的查询没有使用已定义的索引吗?

1 个答案:

答案 0 :(得分:2)

您的查询对象使用and而不是$and运算符,因此它会在您的文档中查找包含查询值的“和”字段。

但是您无需使用$and,因为多个查询字词都是隐式AND,因此您可以这样做:

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

应该可以正常使用你的索引。