#mongodb #aggregate-functions
#mongodb #агрегатные функции
Вопрос:
У меня есть коллекция подписчиков:
{id: ObjectId ('52dskf45f10dsd4775'), agencyCode: '4579520',
listOfSubscriptions: [
{name: 'william', CreatedAt: ISODate ('2019-01-02'), subscriptionType: 'smartphones'},
{name: 'marianna', CreatedAt: ISODate ('2019-02-02'), subscriptionType: 'smartphones'},
{name: 'Freewind', CreatedAt: ISODate ('2019-04-02'), subscriptionType: 'smartphones'}
]
}
Коллекция агентства содержит следующие данные:
{agencyCode: '4579520', BU: 'finances', company: ObjectId (' 445700500b24dsjdfm ')}
{agencyCode: '45007', BU: 'finances', company: ObjectId (' 445700500b24dsjdfm ')}
Тип подписки на коллекцию:
{id:ObjectId ('5lkf81gf45005drkj') ,nameSubscription: 'intense',SubscriptionType: 'smartphones' }
{id:ObjectId ('eb4512ezope780') ,nameSubscription: 'other',SubscriptionType: 'other' }
Я хочу продолжить с подписчиками по типу подписки.
Вот мой запрос mongodb:
subscribers.aggregate(
[
{
$lookup: {
from: "agencys",
localField: "agencyCode",
foreignField: "agencyCode",
as: "data_agency"
}
},
{ $unwind: "$data_agency" },
{ $unwind: "$listOfSubscriptions" },
{
$match: {
$and: [
{ $agencyCode: '4579520' },
{ "data_agency.BU": 'finances' },
{ "data_agency.company": mongoose.Types.ObjectId('445700500b24dsjdfm') },
]
}
},
{
$group: {
"_id": "$listOfSubscriptions.subscriptionType",
countLines: { $sum: 1 },
}
},
]
результат моего запроса:
{
"_id": "smartphones",
"countLines": 3
}
в результате моего запроса не отображается остальной тип подписки.
Я хочу отобразить все типы подписок, подобные этому, для агентства ‘4579520’:
{
"_id": "smartphones",
"countLines": 3
},
{
"_id": "other",
"countLines": 0
}
Спасибо,
Комментарии:
1. Вы уверены, что в вашем запросе нет опечатки? Я вижу
"data_agency.BU": 'fiances'
вместо финансов2. Она верна, я обманут в «data_agency.BU».
3. Получаете ли вы ожидаемые результаты?
4. У меня был такой результат
{ "_id": "smartphones", "countLines": 3 }