sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan udfører man en værdibaseret Order By i MongoDB?

Du skal $project en "vægt" for hver værdi i rækkefølge i MongoDB-termer, og det betyder .aggregate() metode:

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 indlejrede brug af den ternære $cond tillader, at hver vare for "status" betragtes som en ordnet "vægt"-værdi i rækkefølgen af ​​de angivne argumenter.

Dette føres igen til $sort , hvor den projekterede værdi ("vægt") bruges til at sortere resultaterne efter den vægtede matchning.

Så på denne måde gives fortrinsret til rækkefølgen af ​​"status"-matches, som vises først i de sorterede resultater.



  1. MongoDB:Kombiner data fra flere samlinger til én..hvordan?

  2. Hvordan indlejrer man en liste i en struktur i Redis for at reducere topniveauet?

  3. Sådan gør du:Brug Apache HBase REST-grænsefladen, del 3

  4. Skip/Mock Redis In Junit