Sie müssen $project
ein „Gewicht“ für jeden Wert in MongoDB-Begriffen, und das bedeutet .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 } }
])
Die verschachtelte Verwendung des ternären $cond
ermöglicht, dass jedes Element für „Status“ als geordneter „Gewicht“-Wert in der Reihenfolge der angegebenen Argumente betrachtet wird.
Diese wiederum wird $sort
zugeführt , wobei der hochgerechnete Wert ("Gewicht") verwendet wird, um die Ergebnisse nach gewichtetem Abgleich zu sortieren.
Auf diese Weise wird also der Reihenfolge der "Status"-Übereinstimmungen der Vorzug gegeben, die in den sortierten Ergebnissen zuerst erscheinen.