我有一个索引:
{
"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,
...
}
任何人都可以解释一下为什么我的查询没有使用已定义的索引吗?
答案 0 :(得分:2)
您的查询对象使用and
而不是$and
运算符,因此它会在您的文档中查找包含查询值的“和”字段。
但是您无需使用$and
,因为多个查询字词都是隐式AND,因此您可以这样做:
db.myCollection.find({
sourceName: "mySourceName",
addedDate: 1414878162405,
sourceKey:"mySource Key",
appKey: "test"}
}).explain()
应该可以正常使用你的索引。