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

Ordenar elemento por valor mongodb

Esto como un concepto general se llama "ponderación". Entonces, sin ningún otro mecanismo implementado, maneja esto lógicamente en una consulta MongoDB al "proyectar" los valores para el "peso" en el documento lógicamente.

Su método para "proyectar" y modificar los campos presentes en su documento es .aggregate() y específicamente es $project etapa de canalización:

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

El $cond operador aquí es un "ternary" ( if/then/else ) condición donde el primer argumento es una declaración condicional que llega a booleano true|false . Si true "entonces" se devuelve el segundo argumento como resultado; de lo contrario, se devuelve el "si no" o el tercer argumento como respuesta.

En este caso "anidado", donde el "sí" es una coincidencia, se asigna una cierta puntuación de "peso", de lo contrario, pasamos a la siguiente prueba de condición donde cuando "tal vez" es una coincidencia, se asigna otra puntuación, o de lo contrario, la puntuación es 0 ya que solo tenemos tres posibilidades para emparejar.

Entonces el $sort La condición se aplica para "ordenar" (en orden descendente) los resultados con el mayor "peso" en la parte superior.