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

Contar ocorrências no documento mongodb aninhado e manter o grupo


Você pode usar a agregação abaixo.

Agrupe por pergunta e resposta para obter a contagem para combinação, seguido de grupo por pergunta para obter a resposta e sua contagem.
db.getCollection('testAggregate').aggregate([
  {"$group":{
    "_id":{"question":"$question","answer":"$answer"},
    "count":{"$sum":1}
  }},
  {"$group":{
    "_id":"$_id.question",
    "answers":{"$push":{"answer":"$_id.answer","count":"$count"}}
  }}
]);

Você pode usar o código abaixo para obter o formato desejado em 3.4.

Alterar $group chaves em k e v seguido por $addFields com $arrayToObject para transformar a matriz em pares de valores-chave nomeados.
db.getCollection('testAggregate').aggregate([
  {"$group":{
    "_id":{"question":"$question","answer":"$answer"},
    "count":{"$sum":1}
  }},
  {"$group":{
    "_id":"$_id.question",
    "answers":{"$push":{"k":"$_id.answer","v":"$count"}}
  }},
 {"$addFields":{"answers":{"$arrayToObject":"$answers"}}}
]);