sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur utför man en värdebaserad Order By i MongoDB?

Du måste $project en "vikt" för varje värde i ordning i MongoDB-termer, och det betyder .aggregate() metod:

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 kapslade användningen av den ternära $cond tillåter varje artikel för "status" att betraktas som ett ordnat "vikt"-värde i den ordning som argumenten ges.

Detta matas i sin tur till $sort , där det projicerade värdet ("vikt") används för att sortera resultaten enligt den viktade matchningen.

Så på detta sätt ges företräde åt ordningen för "status"-matchningar som visas först i de sorterade resultaten.



  1. 2 sätt att lägga till ett värde till en array i MongoDB

  2. Mongoose returnerar odefinierat för ett befintligt fält

  3. SCUMM:Den agentbaserade databasövervakningsinfrastrukturen i ClusterControl

  4. Hadoop-räknare och typer av räknare i MapReduce