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

MongoDB Conta o número total de valores verdadeiros e falsos para documentos que correspondem a uma consulta


A estrutura de agregação é sua resposta:
db.collection.aggregate([
    { "$match": { "pollId": "hr4946-113" } },
    { "$group": {
        "_id": "$vote",
        "count": { "$sum": 1 }
    }}
])

Basicamente o $group operador reúne todos os dados por "chave" e "operadores de agrupamento" como $sum trabalhar os valores. Neste caso, basta adicionar 1 nos limites para indicar uma contagem.

Da-te:
{ "_id": true, "count": 1 }, 

Você pode ser bobo e expandir isso em uma única resposta de documento usando o $cond operador para avaliar condicionalmente os valores do campo:
db.collection.aggregate([
    { "$match": { "pollId": "hr4946-113" } },
    { "$group": {
        "_id": "$vote",
        "count": { "$sum": 1 }
    }},
    { "$group": {
        "_id": null,
        "yesCount": {
            "$sum": {
                "$cond": [ "_id", 1, 0 ]
            }
        },
        "noCount": {
            "$sum": {
                "$cond": [ "_id", 0, 1 ]
            }
        }
    }},
    { "$project": { "_id": 0 } }
])

E o resultado:
{ "yesCount": 1, "noCount": 0 }