У меня есть следующие запросы на подсчет:
db.collection.count({code : {$in : ['delta', 'beta']}});
db.collection.count({code : 'alpha'});
для данного набора данных
[
{
"code": "detla",
"name": "delta1"
},
{
"code": "detla",
"name": "delta2"
},
{
"code": "detla",
"name": "delta3"
},
{
"code": "detla",
"name": "delta4"
},
{
"code": "beta",
"name": "beta1"
},
{
"code": "beta",
"name": "beta2"
},
{
"code": "beta",
"name": "beta3"
},
{
"code": "beta",
"name": "beta4"
},
{
"code": "beta",
"name": "beta5"
},
{
"code": "alpha",
"name": "alpha1"
},
{
"code": "alpha",
"name": "alpha2"
},
{
"code": "alpha",
"name": "alpha3"
}
]
Есть ли способ достичь этого, используя одиночное объединение () и вложенную группу $ в mongodb@3.2?
Я понимаю, что это классический вариант использования для mapReduce () , но я не могу здесь указать, поскольку $ group по параметрам (code
в приведенном выше примере) является динамически генерируемым атрибутом, поэтому Построение этапов агрегации также динамично.
Ожидаемый результат совпадает с результатом двух запросов на подсчет.
-> Запрос первого счета (дельта, комбинированный счет бета) -> 9
-> Запрос второго счета (счет альфа) -> 3