sql >> Database >  >> NoSQL >> MongoDB

Sorteer item op waarde mongodb

Dit als algemeen concept wordt "weging" genoemd. Dus zonder enig ander mechanisme, handel je dit logisch af in een MongoDB-query door de waarden voor het "gewicht" logisch in het document te "projecteren".

Uw methode voor het "projecteren" en wijzigen van de velden in uw document is de .aggregate() methode, en in het bijzonder is het $project pijplijnfase:

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

De $cond operator hier is een "ternary" ( if/then/else ) voorwaarde waarbij het eerste argument een voorwaardelijke instructie is die aankomt op boolean true|false . Indien true "then" wordt het tweede argument geretourneerd als het resultaat, anders wordt het "else" of derde argument als antwoord geretourneerd.

In dit "geneste" geval, waar "ja" een overeenkomst is, wordt een bepaalde "gewichtsscore" toegekend, anders gaan we verder met de volgende conditietest waarbij wanneer "misschien" een overeenkomst is, dan wordt een andere score toegekend, of anders is de score 0 omdat we maar drie mogelijkheden hebben om te matchen.

Dan de $sort voorwaarde wordt toegepast om de resultaten met het grootste "gewicht" bovenaan te "ordenen" (in aflopende volgorde).




  1. Mongoose retourneert gegevens in _doc object

  2. Waar MongoDB-kaart / reduceerfuncties in Java-project te schrijven en op te slaan?

  3. mongoexport E QUERY SyntaxError:Onverwachte id

  4. Hoe schrijf je een MongoDB $ slice in golang