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

Como contar ocorrências no documento aninhado no mongodb?


Existem algumas maneiras de abordar isso, dependendo da quantidade de dados que você precisa processar. Você pode usar a Estrutura de agregação no MongoDB 2.2+, ou possivelmente Map/Reduce . Consulte Comparação de comandos de agregação para um resumo dos recursos e limitações.

Aqui está um exemplo usando o Aggregation Framework:
db.fruit.aggregate(
    // Limit matching documents (can take advantage of index)
    { $match: {
        "_id" : ObjectId("52c1d909fc7fc68ddd999a73")
    }},

    // Unpack the question & answer arrays
    { $unwind: "$questions" },
    { $unwind: "$questions.answers" },

    // Group by the answer values
    { $group: {
        _id: "$questions.answers.answer",
        count: { $sum: 1 }
    }}
)

Para seu documento de amostra, isso retorna:
{
    "result" : [
        {
            "_id" : "banana",
            "count" : 1
        },
        {
            "_id" : "apple",
            "count" : 2
        }
    ],
    "ok" : 1
}