如何让MongoDB中$exists:false的查询使用对应字段存在条件的部分索引?
MongoDB部分索引在
$exists:false查询中的使用问题 - 结论:没办法让
db.coll.find({"field1": {"$exists": false}})直接用到你创建的{"field1": {"$exists": true}}部分索引。 - 核心原因:你创建的部分索引只包含
field1存在的文档,索引里完全没有field1不存在的文档条目。MongoDB要查询field1不存在的文档时,这个索引根本提供不了任何有效数据,自然不会选择它。 - 可行优化方案:
- 考虑到你说
field1仅存在于极少数文档,查询field1不存在的文档时,全表扫描的实际效率其实不会差——毕竟要返回的是绝大多数文档,全表扫反而可能比走索引更高效。 - 如果一定要用索引优化这个查询,可以创建一个反向的部分索引:
之后再执行db.coll.createIndex({field1: 1}, {partialFilterExpression: {"field1": {"$exists": false}}})db.coll.find({"field1": {"$exists": false}})就能命中这个新索引了。
- 考虑到你说
内容的提问来源于stack exchange,提问作者Raghu
相关产品推荐
相关产品推荐

