此处涵盖的查询的 mongo 文档讨论了查询和投影,如果您想要涵盖的查询,只需关闭投影中的 _id 字段。如果您需要 _id 字段并且仍然想要覆盖查询的效率(indexOnly = True)怎么办?
db.collection.ensureIndex({field1:1,_id:1})
db.collection.getIndexKeys()
[{
"_id" : 1
},
{
"field1" : 1
},
{
"field1" : 1,
"_id" : 1
}]
db.collection.find({field1:{$regex:/^\s/}},{field1:1,_id:1}).explain()
{
"cursor" : "BtreeCursor fieldname",
"isMultiKey" : false,
"n" : 3582,
"nscannedObjects" : 3582,
"nscanned" : 130511408,
"nscannedObjectsAllPlans" : 3582,
"nscannedAllPlans" : 130511408,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 20,
"nChunkSkips" : 0,
"millis" : 158705,
"indexBounds" : {
"cdr3_aa" : [
[
"",
{
}
]
]
},
"server" : localhost}
当然,如果我在投影上关闭 _id,IndexOnly 会返回 true,并且查询速度很快。我究竟做错了什么?
编辑 - 我通过摆脱对空间的不区分大小写,添加 ^ 来加快查询速度,但 IndexOnly : False,从而提高了效率。我不明白为什么它不是真的。