我在mongo有一個查詢,這樣我想優先選擇第一個字段,然後第二個字段。排序在多個字段mongo DB
說我有查詢,使得
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})
它掃描少的文件數量
我只想問要清楚在多個領域進行排序以及在執行此操作時要保留的順序是什麼。通過閱讀mongo-DB文件,清楚地知道我們需要進行排序的領域應該是最後一個領域。所以這是我在上面的$ ne查詢中假設的情況。我做錯了什麼?
這是如何回答這個問題保持「名稱」?您仍然無法確保按照「評分降序,更新降序」而不是「更新降序,評級降序」的順序進行排序。 – jobermark
@jobermark在原始問題中,查詢條件是「類別」,複合排序順序爲「 {updated:-1,rating:-1}'。索引中鍵的順序(和方向)很重要;建議的索引將不會有效地支持「'rating:-1,updated:-1}」排序的'content'的搜索。如果您在驅動程序中操作複合排序值,請使用有序散列/字典來確保排序被保留。有關更多信息,請參閱MongoDB文檔中的[對多個字段進行排序](https://docs.mongodb.org/manual/tutorial/sort-results-with-indexes/#sort-on-multiple-fields)。 – Stennie