2015-10-09 13 views

risposta

0

per ordinare ASC -> stato: 1

db.users.find().sort({ status: 1 }) 

per ordinare DESC -> Stato: -1

db.users.find().sort({ status: -1 }) 
+0

Questo è un tipo semplice. Come posso ordinare in base ai valori. Quindi, lo stato , 'C', 'A', 'B', 'D' - restituirà agli utenti lo stato 'C' prima di 'A' e così via. –

+0

Vuoi inviare un array con gli stati (ordinati come vuoi) come parametri? – makcs

5

È necessario $project un "peso" per ogni valore al fine in termini MongoDB, e questo significa il metodo .aggregate():

db.users.aggregate([ 
    { "$project": { 
     "status": 1, 
     "a_field": 1, 
     "another_field": 1, 
     "pretty_much_every_field": 1, 
     "weight": { 
      "$cond": [ 
       { "$eq": [ "$status", "A" ] }, 
       10, 
       { "$cond": [ 
        { "$eq": [ "$status", "B" ] }, 
        8, 
        { "$cond": [ 
         { "$eq": [ "$status", "C" ] }, 
         6, 
         { "$cond": [ 
          { "$eq": [ "$status", "D" ] }, 
          4, 
          0 
         ]} 
        ]} 
       ]} 
      ] 
     } 
    }}, 
    { "$sort": { "weight": -1 } } 
]) 

L'uso nidificato di ternary$cond consente a ciascun elemento di "stato" di essere considerato come un valore di "peso" ordinato nell'ordine degli argomenti specificati.

Questo a sua volta viene inviato a $sort, dove viene utilizzato il valore proiettato ("peso") per ordinare i risultati come ottenuti dalla corrispondenza ponderata.

In questo modo, la preferenza viene assegnata all'ordine di "stato" corrispondente a quale viene visualizzato per primo nei risultati ordinati.

Problemi correlati