【问题标题】:mongodb query not using indexmongodb查询不使用索引
【发布时间】:2016-06-15 19:28:04
【问题描述】:

我有一个索引:

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

谁能解释一下为什么我的查询没有使用定义的索引?

【问题讨论】:

    标签: mongodb mongodb-query database nosql


    【解决方案1】:

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

    但无论如何您都不需要使用$and,因为多个查询词是隐式与的,所以您可以这样做:

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

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

    【讨论】:

    • 我不敢相信我错过了这一点。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 2022-09-28
    相关资源
    最近更新 更多