Ho una query in mongo tale che voglio dare la preferenza al primo campo e quindi al secondo campo.Ordinamento su più campi mongo DB
dire che ho per interrogare in modo tale che
db.col.find({category: A}).sort({updated: -1, rating: -1}).limit(10).explain()
così ho creato il seguente indice
db.col.ensureIndex({category: 1, rating: -1, updated: -1})
ha funzionato la scansione solo multato come molti oggetti come necessario cioè 10
Ma ora io bisogno di interrogare
db.col.find({category: { $ne: A}}).sort({updated: -1, rating: -1}).limit(10)
così ho creato il seguente indice
db.col.ensureIndex({rating: -1, updated: -1})
ma questo porta alla scansione dell'intero documento e quando creo
db.col.ensureIndex({ updated: -1 ,rating: -1})
Esamina meno il numero di documento
Voglio solo chiedere per essere chiari sull'ordinamento su più campi e quale è l'ordine da conservare quando si fa. Leggendo i documenti del mongo-DB è chiaro che il campo su cui dobbiamo eseguire l'ordinamento dovrebbe essere l'ultimo campo. Quindi questo è il caso che ho assunto nella mia query $ ne sopra. Sto facendo qualcosa di sbagliato?
come fa questo risponde alla domanda? Non è ancora possibile assicurarsi di ottenere il tipo nell'ordine "rating desc, updated desc" piuttosto che "desc aggiornato, rating desc" – jobermark
@jobermark Nella domanda originale il criterio di query è 'category' con un ordinamento composto di' {aggiornato: -1, valutazione: -1} '. L'ordine (e la direzione) delle chiavi nell'indice è importante; l'indice suggerito non supporta in modo efficiente una ricerca su 'content' ordinati per' {rating: -1, aggiornato: -1} '. Se si stanno manipolando i valori di ordinamento composti in un driver, utilizzare un hash/dizionario ordinato per garantire che l'ordine venga mantenuto. Per ulteriori informazioni consultare [Ordina su più campi] (https://docs.mongodb.org/manual/tutorial/sort-results-with-indexes/#sort-on-multiple-fields) nella documentazione di MongoDB. – Stennie