MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Element nach Wert sortieren mongodb

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).