У меня есть коллекция с документами в следующем формате:
{
"_id" : ObjectId("abc"),
"mobile" : "123456789",
"channels" : [
{
"name" : "email.xz",
"type" : "a",
"properties" : [
{
"provider" : "outlook"
}
]
},
{
"name" : "sms",
"type" : "sms"
}
],
}
Мне нужно найти клиентов, у которых есть хотя бы один канал, имя которого заканчивается на «.xz», но только если поставщик существует иимеет значение и возвращает количество клиентов на канал.Например:
email.xz = 10
sms.xz = 5
push.xz = 7
Я попытался использовать агрегированную функцию ниже, но это привело к подсчету всех клиентов, которые соответствуют критериям.
db.consumers.aggregate(
{$match: {"channels.name": {$regex: ".xz$"},
"notificationChannels.properties.provider": { $exists: true }}},
{$group: {_id: "channels.name"},
count: {$sum: 1}})