Necesitará dos grupos en este caso. El primer grupo genera un flujo de documentos con un documento por término y categoría:
{ $group : {
_id : {
category: "$category",
term: "$term",
},
total: { $sum : 1 }
}
}
Luego, un segundo grupo fusionará todos los documentos con el mismo término en uno, utilizando el operador $push para fusionar las categorías en una matriz:
{ $group : {
_id : "$_id.category",
terms: {
$push: {
term:"$_id.term",
total:"$total"
}
}
}
}