为什么MongoDB没有使用正确的索引?

sco*_*tes 5 mongodb

我有一个MongoDB查询,我正在尝试优化.我创建了一个与查询中的字段匹配的索引,但我似乎无法让MongoDB的查询规划器在没有显式的情况下使用索引hint(),即使nscannedmillis对于提示版本更好.

这是索引,查询(有和没有提示),以及详细解释:

http://paste.roguecoders.com/p/4face5649612e840da04c5fea0491c9b.txt

另外一点信息:这个索引在一个大型集合中,在一个副本集中,所以我使用离线方法构建了索引.它现在存在于所有节点中.

(最初发布在MongoDB-User上.)

Asy*_*sky 3

这似乎是 2.4 中的回归,当 {$in:[ ]} 子句中的值之一为“null”时,它会影响 SERVER-5063 修复。我将其作为新票提交https://jira.mongodb.org/browse/SERVER-9495我希望能尽快对其进行分类和修复。

同时,根据为什么存在空值(或缺少字段?)以及 true/false,您有多种选择,一些涉及更改查询,一些涉及更改数据。我不建议为此降级到 2.2,但这也是一种可能性。