mongodb agrega várias matrizes
Estou usando a versão v3.4 do MongoDB. Eu tenho umdocuments
os dados de coleta e amostra são assim:
{
"mlVoters" : [
{"email" : "[email protected]", "isApproved" : false}
],
"egVoters" : [
{"email" : "[email protected]", "isApproved" : false},
{"email" : "[email protected]", "isApproved" : true}
]
},{
"mlVoters" : [
{"email" : "[email protected]", "isApproved" : false},
{"email" : "[email protected]", "isApproved" : true}
],
"egVoters" : [
{"email" : "[email protected]", "isApproved" : true}
]
}
Agora, se eu quiser a contagem de endereços de e-mail distintos para mlVoters:
db.documents.aggregate([
{$project: { mlVoters: 1 } },
{$unwind: "$mlVoters" },
{$group: { _id: "$mlVoters.email", mlCount: { $sum: 1 } }},
{$project: { _id: 0, email: "$_id", mlCount: 1 } },
{$sort: { mlCount: -1 } }
])
O resultado da consulta é:
{"mlCount" : 2.0,"email" : "[email protected]"}
{"mlCount" : 1.0,"email" : "[email protected]"}
E se eu quiser a contagem de endereços de e-mail distintos para egVoters, faço o mesmo para o campo egVoters. E o resultado dessa consulta seria:
{"egCount" : 1.0,"email" : "[email protected]"}
{"egCount" : 1.0,"email" : "[email protected]"}
{"egCount" : 1.0,"email" : "[email protected]"}
Então, quero combinar essas duas agregações e obter o resultado da seguinte maneira (classificado por totalCount):
{"email" : "[email protected]", "mlCount" : 2, "egCount" : 1, "totalCount":3}
{"email" : "[email protected]", "mlCount" : 1, "egCount" : 1, "totalCount":2}
{"email" : "[email protected]", "mlCount" : 0, "egCount" : 1, "totalCount":1}
Como posso fazer isso? Como deve ser a consulta? Obrigado