Je moet $project
een "gewicht" voor elke waarde in MongoDB-termen, en dat betekent de .aggregate()
methode:
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 } }
])
Het geneste gebruik van de ternaire $cond
staat toe dat elk item voor "status" wordt beschouwd als een geordende "gewichtswaarde" in de volgorde van de gegeven argumenten.
Dit wordt op zijn beurt doorgegeven aan $sort
, waarbij de geprojecteerde waarde ("gewicht") wordt gebruikt om de resultaten te sorteren op basis van de gewogen overeenkomst.
Dus op deze manier wordt de voorkeur gegeven aan de volgorde van "status"-overeenkomsten die als eerste verschijnt in de gesorteerde resultaten.