Devi $project
un "peso" per ogni valore in ordine in termini MongoDB, e questo significa .aggregate()
metodo:
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 annidato del ternario $cond
consente di considerare ogni articolo per "stato" come un valore di "peso" ordinato nell'ordine degli argomenti forniti.
Questo a sua volta viene inviato a $sort
, in cui il valore previsto ("peso") viene utilizzato per ordinare i risultati in base alla corrispondenza ponderata.
Quindi in questo modo viene data la preferenza all'ordine delle corrispondenze di "stato" in base a quale appare per prima nei risultati ordinati.