sql >> Database >  >> NoSQL >> MongoDB

Hoe voer je een op waarde gebaseerde Order By uit in MongoDB?

Je moet $project een "gewicht" voor elke waarde in MongoDB-termen, en dat betekent de .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 } }
])

Het geneste gebruik van de ternaire $cond staat toe dat elk item voor "status" wordt beschouwd als een geordende "gewichtswaarde" in de volgorde van de gegeven argumenten.

Dit wordt op zijn beurt doorgegeven aan $sort , waarbij de geprojecteerde waarde ("gewicht") wordt gebruikt om de resultaten te sorteren op basis van de gewogen overeenkomst.

Dus op deze manier wordt de voorkeur gegeven aan de volgorde van "status"-overeenkomsten die als eerste verschijnt in de gesorteerde resultaten.



  1. AOF- en RDB-back-ups in redis

  2. MongoDB .NET-stuurprogramma groeperen op tijdbereik

  3. pipelining vs transactie in redis

  4. MongoDB - Projectievragen