Du måste $project
en "vikt" för varje värde i ordning i MongoDB-termer, och det betyder .aggregate()
metod:
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 } }
])
Den kapslade användningen av den ternära $cond
tillåter varje artikel för "status" att betraktas som ett ordnat "vikt"-värde i den ordning som argumenten ges.
Detta matas i sin tur till $sort
, där det projicerade värdet ("vikt") används för att sortera resultaten enligt den viktade matchningen.
Så på detta sätt ges företräde åt ordningen för "status"-matchningar som visas först i de sorterade resultaten.