Трябва да $project
"тегло" за всяка стойност по реда в термините на MongoDB и това означава .aggregate()
метод:
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 } }
])
Вложеното използване на тернарния $cond
позволява всеки елемент за „статус“ да се разглежда като подредена стойност на „тегло“ в реда на дадените аргументи.
Това от своя страна се подава към $sort
, където прогнозираната стойност ( "тегло") се използва за сортиране на резултатите, както се оценяват от претегленото съвпадение.
Така че по този начин се дава предпочитание на реда на съвпаденията на „статус“ по отношение на това кое се появява първо в сортираните резултати.