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

Ordina l'articolo per valore mongodb

Questo come concetto generale è chiamato "ponderazione". Quindi, senza alcun altro meccanismo in atto, lo gestisci logicamente in una query MongoDB "proiettando" i valori per il "peso" nel documento in modo logico.

Il tuo metodo per "proiettare" e modificare i campi presenti nel tuo documento è il .aggregate() metodo, e in particolare è $project fase della pipeline:

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

Il $cond operatore qui è un "ternario" ( if/then/else ) condizione in cui il primo argomento è un'istruzione condizionale che arriva a booleano true|false . Se true "quindi" viene restituito il secondo argomento come risultato, altrimenti viene restituito "else" o il terzo argomento in risposta.

In questo caso "nidificato", quindi dove il "sì" è una corrispondenza viene assegnato un certo punteggio di "peso", altrimenti si passa al test di condizione successivo in cui quando "forse" è una corrispondenza viene assegnato un altro punteggio, oppure altrimenti il ​​punteggio è 0 poiché abbiamo solo tre possibilità da abbinare.

Quindi $sort viene applicata la condizione per, bene "ordinare" (in ordine decrescente) i risultati con il "peso" più grande in cima.