【发布时间】:2014-09-03 05:16:13
【问题描述】:
我有一个包含字段 _id、姓名、年龄、日期的测试数据库
索引:
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "blogger.users"
},
{
"v" : 1,
"key" : {
"name" : 1,
"age" : 1
},
"name" : "name_1_age_1",
"ns" : "blogger.users"
},
{
"v" : 1,
"key" : {
"age" : 1,
"name" : 1
},
"name" : "age_1_name_1",
"ns" : "blogger.users"
}
]
运行以下查询时:
> db.users.find({"name":"user10"},{"_id":0,"date":0})
.explain()
我得到以下信息:
{
"cursor" : "BtreeCursor name_1_age_1",
"isMultiKey" : false,
"n" : 1,
"nscannedObjects" : 1,
"nscanned" : 1,
"nscannedObjectsAllPlans" : 2,
"nscannedAllPlans" : 2,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"indexBounds" : {
"name" : [
[
"user10",
"user10"
]
],
"age" : [
[
{
"$minElement" : 1
},
{
"$maxElement" : 1
}
]
]
},
"server" : "Johny-PC:27017",
"filterSet" : false
}
不解释结果是:
{ "name" : "user10", "age" : 68 }
即使这是一个具有正确预测的覆盖查询,indexOnly 字段仍然是错误的。我也尝试过使用提示显式提供索引,但没有改变。在这种情况下,nscannedObjectsAllPlans 和 nscannedAllPlans 的值为 1,因为查询不会尝试其他索引。
【问题讨论】:
标签: mongodb mongodb-query