我在 mongo 中有一个查询,因此我想优先考虑第一个字段,然后是第二个字段。
说我必须这样查询
db.col.find({category: A}).sort({updated: -1, rating: -1}).limit(10).explain()
所以我创建了以下索引
db.col.ensureIndex({category: 1, rating: -1, updated: -1})
它可以根据需要扫描尽可能多的对象,即10
.
但现在我需要查询
db.col.find({category: { $ne: A}}).sort({updated: -1, rating: -1}).limit(10)
所以我创建了以下索引:
db.col.ensureIndex({rating: -1, updated: -1})
但这会导致扫描整个文档,当我创建
db.col.ensureIndex({ updated: -1 ,rating: -1})
它扫描的文档数量更少:
我只想问清楚对多个字段进行排序以及这样做时要保留的顺序是什么。通过阅读 MongoDB 文档,很明显我们需要对其执行排序的字段应该是最后一个字段。这就是我在$ne
上面的查询中假设的情况。我做错什么了吗?