【发布时间】:2014-02-06 06:07:20
【问题描述】:
如果我有这些文档:
{"name": 1, "score": 2}
{"name": 1, "score": 4}
{"name": 2, "score": 2}
{"name": 2, "score": 4}
如果我确保索引:
db.test.ensureIndex({"name":1, "score":1})
然后我尝试 find():
db.test.find({"score": 4})
我使用explain(),发现这个查询不能使用索引,它扫描了所有四个文档。
我想知道为什么它会扫描所有文档?
你知道,如果我枚举所有 "name" 的值(1 和 2):
db.test.find({"$or":["name":1, "name":2], "score":4})
它可以使用索引并且只扫描两个文档。
为什么 mongodb 不能为我做这件事?
【问题讨论】:
-
当两个子句具有相同的字段时,您不应该使用 $or。请改用 { name : { $in : [ 1, 2 ] } }。
标签: mongodb indexing mongodb-query