【发布时间】:2020-01-14 15:53:20
【问题描述】:
我正在使用 MongoDB 版本 4.2.0。我有一个包含以下索引的集合:
{uuid: 1},
{unique: true, name: "uuid_idx"}
和
{field1: 1, field2: 1, _id: 1},
{unique: true, name: "compound_idx"}
执行此查询时
aggregate([
{"$match": {"uuid": <uuid_value>}}
])
规划者正确选择uuid_idx。
添加此排序子句时
aggregate([
{"$match": {"uuid": <uuid_value>}},
{"$sort": {"field1": 1, "field2": 1, "_id": 1}}
])
规划器选择compound_idx,这会使查询变慢。
我希望 sort 子句在这种情况下不会产生影响。 为什么 Mongo 在这两种情况下都不使用uuid_idx 索引?
编辑: 稍微澄清一下,我知道有一些解决方法可以使用正确的索引,但我正在寻找解释为什么这不会自动发生(如果可能的话,带有官方文档的链接)。谢谢!
【问题讨论】:
-
如果有人想知道,查询是动态生成的,目前排序子句是自动插入的。
-
第二个聚合查询选择了多少文档(具有匹配和排序阶段的文档)?
标签: mongodb indexing aggregation-framework