Du skal $project
en "vægt" for hver værdi i rækkefølge i MongoDB-termer, og det betyder .aggregate()
metode:
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 indlejrede brug af den ternære $cond
tillader, at hver vare for "status" betragtes som en ordnet "vægt"-værdi i rækkefølgen af de angivne argumenter.
Dette føres igen til $sort
, hvor den projekterede værdi ("vægt") bruges til at sortere resultaterne efter den vægtede matchning.
Så på denne måde gives fortrinsret til rækkefølgen af "status"-matches, som vises først i de sorterede resultater.