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

Wie führe ich eine wertbasierte Bestellung nach in MongoDB durch?

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.