MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Classificar item por valor mongodb


Isso como um conceito geral é chamado de "ponderação". Portanto, sem nenhum outro mecanismo em vigor, você lida com isso logicamente em uma consulta do MongoDB "projetando" os valores para o "peso" no documento logicamente.

Seu método para "projetar" e alterar os campos presentes em seu documento é o .aggregate() e especificamente é $project estágio do encanamento:
db.collection.aggregate([
    { "$project": {
        "getthisfirst": 1,
        "weight": {
            "$cond": [
                { "$eq": [ "$getthisfirst", "yes" ] },
                10,
                { "$cond": [
                    { "$eq": [ "$getthisfirst", "maybe" ] },
                    5,
                    0
                ]}
            ]
        }
    }},
    { "$sort": { "weight": -1 } }
]);

O $cond operador aqui é um "ternary" ( if/then/else ) condição onde o primeiro argumento é uma declaração condicional que chega ao booleano true|false . Se true "then" o segundo argumento é retornado como resultado, caso contrário, o "else" ou o terceiro argumento são retornados em resposta.

Neste caso "aninhado", então onde o "sim" é uma correspondência, uma certa pontuação de "peso" é atribuída, caso contrário, passamos para o próximo teste de condição, onde quando "talvez" é uma correspondência, outra pontuação é atribuída, ou caso contrário, a pontuação é 0 já que só temos três possibilidades para combinar.

Em seguida, o $sort A condição é aplicada para bem "ordenar" (em ordem decrescente) os resultados com o maior "peso" no topo.