Ich habe eine Abfrage in Mongo, so dass ich das erste Feld und dann das zweite Feld bevorzugen.Sortierung auf mehrere Felder mongo DB
sagen, dass ich so abzufragen haben, dass
db.col.find({category: A}).sort({updated: -1, rating: -1}).limit(10).explain()
Also habe ich den folgenden Index
db.col.ensureIndex({category: 1, rating: -1, updated: -1})
Es so viele Objekte nur bestraft Scan gearbeitet wie zB 10
benötigt Aber ich jetzt muss abgefragt werden
db.col.find({category: { $ne: A}}).sort({updated: -1, rating: -1}).limit(10)
Also habe ich den folgenden Index
db.col.ensureIndex({rating: -1, updated: -1})
aber dies führt zu Scannen des gesamten Dokuments und als ich
db.col.ensureIndex({ updated: -1 ,rating: -1})
erstellen scannt es eine geringere Anzahl von Dokumenten
Ich möchte nur fragen um Klarheit über das Sortieren auf mehreren Feldern zu haben und welche Reihenfolge dabei zu wahren ist. Durch das Lesen der Mongo-DB-Dokumente wird klar, dass das Feld, auf dem wir sortieren müssen, das letzte Feld sein sollte. Also das ist der Fall, den ich in meiner $ ne-Abfrage oben angenommen habe. Mache ich etwas falsch?
Wie beantwortet sich die Frage sortieren wird? Sie können immer noch nicht sicherstellen, dass Sie die Sortierung in der Reihenfolge "rating desc, updated desc" statt "updated desc, rating desc" erhalten. – jobermark
@jobermark In der ursprünglichen Frage lautet das Abfragekriterium "category" mit einer zusammengesetzten Sortierreihenfolge von ' {aktualisiert: -1, rating: -1} '. Die Reihenfolge (und Richtung) der Schlüssel im Index ist wichtig. Der vorgeschlagene Index unterstützt eine Suche nach "content" nicht effizient, sortiert nach '{rating: -1, updated: -1}'. Wenn Sie zusammengesetzte Sortierwerte in einem Treiber bearbeiten, verwenden Sie ein geordnetes Hash/Dictionary, um sicherzustellen, dass die Reihenfolge beibehalten wird. Weitere Informationen finden Sie unter [Sortieren nach mehreren Feldern] (https://docs.mongodb.org/manual/tutorial/sort-results-with-indexes/#sort-on-multiple-fields) in der MongoDB-Dokumentation. – Stennie