我的索引:
{
"v" : 1,
"key" : {
"a" : 1,
"b" : 1,
"c" : 1
},
"ns" : "Pepper.test",
"name" : "a_1_b_1_c_1"
}
样本记录:
{ "_id" : ObjectId("527a8477a868a04479a56a56"), "a" : 1, "b" : 1, "c" : 1, "x" : -1 }
我的查询:
db.test.find({a: 1, b: 1, c: 1},{_id: 0, x:0})
解释()的输出:
{
"cursor" : "BtreeCursor a_1_b_1_c_1",
"isMultiKey" : false,
"n" : 1,
"nscannedObjects" : 1,
"nscanned" : 1,
"nscannedObjectsAllPlans" : 1,
"nscannedAllPlans" : 1,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"indexBounds" : {
"a" : [
[
1,
1
]
],
"b" : [
[
1,
1
]
],
"c" : [
[
1,
1
]
]
},
"server" : "ip-x-x-x-x:27017"
}
从文档看来,像这样的测试应该在解释中将“indexOnly”报告为 true,但事实并非如此。我做错了什么,还是误解了涵盖查询的限制?这个数据集只是一个展示问题的样本,但它与我的真实数据和索引的基本结构相同。
做一个测试,如果我从我的数据中完全删除 x 字段,并指定包含 a、b、c 并排除 _id 它可以工作。如果您的数据集中有任何不属于索引的字段,我似乎无法进行覆盖索引。我尝试包含 a、b、c 并排除 _id 和 x,但 mongo 提供了一个错误说明:
"$err" : "您目前不能混合包含和排除字段。如果这是一个问题,请联系我们。"