Вы можете объединить $match
и $group
для того, чего вы хотите достичь.Операция сопоставления будет отфильтрована на accountID
, где группа объединит результаты в поле состояния и подсчитает вхождения с помощью аккумулятора.
Форматирование двух запросов будет выглядеть следующим образом:
Соответствующий запрос:
{'$match': {
'key.accountID': '<<account_id>>'
}
}
Групповой запрос:
{'$group': {
'_id': '$status',
'count': {'$sum': 1}
}
}
В Java это можно сделать так:
Arrays.asList(
match(eq("key.accountID", "test")),
group("$status", sum("count", 1L))
)
PS для java потребуется следующееимпорт:
import java.util.Arrays;
import static com.mongodb.client.model.Filters.eq;
import static com.mongodb.client.model.Aggregates.group;
import static com.mongodb.client.model.Aggregates.match;
import static com.mongodb.client.model.Accumulators.sum;