Musíte $project
"váha" pro každou hodnotu v pořadí podle MongoDB, a to znamená .aggregate()
metoda:
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 } }
])
Vnořené použití ternárního $cond
umožňuje, aby každá položka pro "stav" byla považována za uspořádanou hodnotu "váhy" v pořadí uvedených argumentů.
To je zase přiváděno do $sort
, kde projektovaná hodnota ( "váha" ) se používá k řazení výsledků podle skóre váženého párování.
Tímto způsobem je tedy upřednostněno pořadí "stavových" shod podle toho, která se v seřazených výsledcích objeví jako první.