Vous devez $project
un "poids" pour chaque valeur dans l'ordre en termes MongoDB, et cela signifie le .aggregate()
méthode :
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'utilisation imbriquée du ternaire $cond
permet à chaque élément de "statut" d'être considéré comme une valeur de "poids" ordonnée dans l'ordre des arguments donnés.
Ceci est à son tour envoyé à $sort
, où la valeur projetée ("pondération" ) est utilisée pour trier les résultats tels qu'ils sont notés par la correspondance pondérée.
Ainsi, de cette manière, la préférence est donnée à l'ordre des correspondances "de statut" quant à celle qui apparaît en premier dans les résultats triés.