sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo realizar un pedido basado en valores en MongoDB?

Necesitas $project un "peso" para cada valor en orden en términos de MongoDB, y eso significa el .aggregate() método:

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

El uso anidado del ternario $cond permite que cada elemento de "estado" se considere como un valor de "peso" ordenado en el orden de los argumentos dados.

Esto a su vez se envía a $sort , donde el valor proyectado ("peso") se usa para clasificar los resultados según la puntuación de la coincidencia ponderada.

Entonces, de esta manera, se da preferencia al orden de las coincidencias de "estado" en cuanto a cuál aparece primero en los resultados ordenados.