У меня следующий агрегированный запрос:
db.user.aggregate()
.match({"business_account_id" : ObjectId("5e3377bcb1dbae5124e4b6bf")})
.lookup({
'localField': 'profile_id',
'from': 'profile',
'foreignField' : '_id',
'as': 'profile'
})
.unwind("$profile")
.match({"profile.type" : "consultant"})
.group({_id:"$business_account_id", count:{$sum:1}})
Моя цель - подсчитать, сколько пользователей консультантов принадлежат данной компании.
Используя приведенный выше запрос, если есть хотя бы один пользователь, принадлежащий указанному business_account_id, получает правильное значение счетчика.
Но если пользователей нет, .match({"business_account_id" : ObjectId("5e3377bcb1dbae5124e4b6bf")})
вернет пустой результат (0 документов).
Как я могу получить count: 0
, если к компании не назначены пользователи?
Я пробовал много подходов, основанных на других потоках, но не могу получить count: 0
ОБНОВЛЕНИЕ 1
Простая версия моей проблемы:
коллекция пользователей
{
"_id" : ObjectId("5e36beb7b1dbae5124e4b6dc"),
"business_account_id" : ObjectId("5e3377bcb1dbae5124e4b6bf"),
},
{
"_id" : ObjectId("5e36d83db1dbae5124e4b732"),
"business_account_id" : ObjectId("5e3377bcb1dbae5124e4b6bf"),
}
Использование следующего агрегированного запроса:
db.getCollection("user").aggregate([
{ "$match" : {
"business_account_id" : ObjectId("5e3377bcb1dbae5124e4b6bf")
}
},
{ "$group" : {
"_id" : "$business_account_id",
"count" : { "$sum" : 1 }
}
}
]);
Я получаю:
{
"_id" : ObjectId("5e3377bcb1dbae5124e4b6bf"),
"count" : 2
}
Но если я запрашиваю ObjectId, который не существует, например:
db.getCollection("user").aggregate([
{ "$match" : {
"business_account_id" : ObjectId("5e335c873e8d40676928656d")
}
},
{ "$group" : {
"_id" : "$business_account_id",
"count" : { "$sum" : 1 }
}
}
]);
, я получаю результат полностью пустым. Я ожидаю получить:
{
"_id" : ObjectId("5e335c873e8d40676928656d"),
"count" : 0
}