È 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.
fonte
2015-10-09 12:08:08
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. –
Vuoi inviare un array con gli stati (ordinati come vuoi) come parametri? – makcs