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

Cuente las ocurrencias en el documento mongodb anidado y el grupo de mantenimiento

Puede usar la siguiente agregación.

Agrupe por pregunta y respuesta para obtener el conteo de combinación seguido de grupo por pregunta para obtener la respuesta y su conteo.

db.getCollection('testAggregate').aggregate([
  {"$group":{
    "_id":{"question":"$question","answer":"$answer"},
    "count":{"$sum":1}
  }},
  {"$group":{
    "_id":"$_id.question",
    "answers":{"$push":{"answer":"$_id.answer","count":"$count"}}
  }}
]);

Puede usar el siguiente código para obtener el formato que desea en 3.4.

Cambiar $group claves en k y v seguidas de $addFields con $arrayToObject para transformar la matriz en pares de valores clave con nombre.

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"}}}
]);