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

Come eseguire un ordine basato sul valore in MongoDB?

Devi $project un "peso" per ogni valore in ordine in termini MongoDB, e questo significa .aggregate() metodo:

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 } }
])

L'uso annidato del ternario $cond consente di considerare ogni articolo per "stato" come un valore di "peso" ordinato nell'ordine degli argomenti forniti.

Questo a sua volta viene inviato a $sort , in cui il valore previsto ("peso") viene utilizzato per ordinare i risultati in base alla corrispondenza ponderata.

Quindi in questo modo viene data la preferenza all'ordine delle corrispondenze di "stato" in base a quale appare per prima nei risultati ordinati.