sql >> Databasteknik >  >> NoSQL >> MongoDB

Sortera objekt efter värde mongodb

Detta som ett allmänt begrepp kallas "viktning". Så utan någon annan mekanism på plats hanterar du detta logiskt i en MongoDB-fråga genom att "projicera" värdena för "vikten" logiskt in i dokumentet.

Din metod för att "projicera" och ändra fälten i ditt dokument är .aggregate() metod, och specifikt är det $project pipeline skede:

db.collection.aggregate([
    { "$project": {
        "getthisfirst": 1,
        "weight": {
            "$cond": [
                { "$eq": [ "$getthisfirst", "yes" ] },
                10,
                { "$cond": [
                    { "$eq": [ "$getthisfirst", "maybe" ] },
                    5,
                    0
                ]}
            ]
        }
    }},
    { "$sort": { "weight": -1 } }
]);

$cond operatör här är en "ternär" ( if/then/else ) villkor där det första argumentet är ett villkorligt påstående som kommer till booleskt true|false . Om true "då" returneras det andra argumentet som resultat, annars returneras "annat" eller det tredje argumentet som svar.

I detta "kapslade" fall, då "ja" är en matchning då tilldelas en viss "vikt"-poäng, annars går vi vidare till nästa tillståndstest där när "kanske" är en matchning så tilldelas en annan poäng, eller annars är poängen 0 eftersom vi bara har tre möjligheter att matcha.

Sedan $sort villkor tillämpas för att väl "ordna" ( i fallande ordning ) resultaten med den största "vikten" överst.




  1. Anpassad MongoDb docker-bild

  2. Varför använder inte MongoDB index-korsning?

  3. Att avgöra varför Redis tar emot en SIGTERM varannan minut

  4. mongo-fråga - finns egendom?