我认为在MongoDB中添加索引不会影响查询结果。但是我遇到了一个这样的情况。
有一个名为scores
的集合。如果没有索引,则会出现以下查询:
db.scores.find({score: {$not: {$gt: 100}}})
返回score
的值不大于100的记录以及缺少键score
的记录。
在score
字段上添加索引会导致MongoDB排除缺少密钥score
的记录。有办法防止这种情况吗?请注意,索引在我们的案例中是必不可少的。
答案 0 :(得分:0)
当MongoDB使用索引时,它只在索引中查找结果。不幸的是,它的行为有所不同,这取决于它是完成了一次完整的表扫描还是仅仅是索引。
虽然有几种方法可以解决这个问题,但您可以这样做:
db.scores.find({ $or : [
{score: { $exists: false }},
{score: {$not: {$gt: 100}}}]})
这只会检查两个条件是true
。如果您检查explain
的结果,您会看到它使用两个条件的索引。
虽然,如果您可以将score
添加到所有文档中,它可能会表现得更好,因为索引使用效率会更高。