Dies als allgemeines Konzept wird "Gewichtung" genannt. Ohne einen anderen Mechanismus können Sie dies also logisch in einer MongoDB-Abfrage handhaben, indem Sie die Werte für das „Gewicht“ logisch in das Dokument „projizieren“.
Ihre Methode zum "Projizieren" und Ändern der in Ihrem Dokument vorhandenen Felder ist .aggregate()
-Methode, und zwar $project
Pipeline-Phase:
db.collection.aggregate([
{ "$project": {
"getthisfirst": 1,
"weight": {
"$cond": [
{ "$eq": [ "$getthisfirst", "yes" ] },
10,
{ "$cond": [
{ "$eq": [ "$getthisfirst", "maybe" ] },
5,
0
]}
]
}
}},
{ "$sort": { "weight": -1 } }
]);
Der $cond
Der Operator hier ist ein "ternary"
( if/then/else ) Bedingung, bei der das erste Argument eine bedingte Anweisung ist, die als boolescher Wert true|false
ankommt . Wenn true
Als Ergebnis wird "then" das zweite Argument zurückgegeben, andernfalls wird als Antwort das "else" oder dritte Argument zurückgegeben.
In diesem "verschachtelten" Fall wird dann, wenn das "Ja" eine Übereinstimmung ist, eine bestimmte "Gewichtungs"-Punktzahl zugewiesen, andernfalls gehen wir weiter zum nächsten Bedingungstest, wo, wenn "vielleicht" eine Übereinstimmung ist, dann eine andere Punktzahl zugewiesen wird, oder andernfalls ist die Punktzahl 0
da wir nur drei passende Möglichkeiten haben.
Dann der $sort
Bedingung wird angewendet, um die Ergebnisse mit dem größten "Gewicht" oben zu "ordnen" (in absteigender Reihenfolge).