Я пытаюсь написать запрос агрегации mon go, который возвращает общее количество записей в коллекции за год-месяц , сгруппированных по местоположению .
Вот пример желаемого вывода:
[
{
_id: 'Location 1',
reviews: [
{ total: 12, date: '03-2019' },
{ total: 55, date: '04-2019' },
{ total: 9, date: '05-2019' }
]
},
{
_id: 'Location 2',
reviews: [
{ total: 8, date: '03-2019' },
{ total: 35, date: '04-2019' },
{ total: 12, date: '05-2019' }
]
}
];
Это усеченный пример схемы:
{
branchId: { type: String, required: true },
orgId: { type: String, required: true },
stars: { type: Number, default: 0 },
reviewUpdatedAt: { type: Date, default: Date.now }
}
Я могу вернуть данные в различных пути, но возникают проблемы с получением желаемого результата. Вот несколько примеров запросов, где я столкнулся с дорожными блоками. В основном у меня возникают проблемы при попытке сгруппировать общее количество записей за месяц, а затем сгруппировать их далее по BranchId / location.
Вот пример группировки по году и месяцу. Ответ содержит счетчики для branchId, но _ids имеют дубликаты для месяца-года для каждой ветви. Мне нужно, чтобы _id был местоположением и иметь массив, содержащий сумму и год-месяц, как показано в приведенном выше примере желаемого вывода.
[
{
$match: {
stars: {$exists: true, $gte: 1},
orgId: '100003'
// reviewUpdatedAt: { $gte: new Date(fromDate), $lte: new Date(toDate) }
}
},
{
$group: {
_id: { $dateToString: { format: '%Y-%m', date: '$reviewUpdatedAt' }},
branchId: {$addToSet: '$branchId'},
total: { $sum: 1 }
}
},
{
$unwind: '$branchId'
},
{ $sort: { _id: 1 } }
]
В приведенном выше примере у меня было несколько Успешная настройка группы и оператора $unwind
выглядит следующим образом:
{
$group: {
_id: '$branchId',
date: { $addToSet: { $dateToString: { format: '%Y-%m', date: '$reviewUpdatedAt' } } },
total: { $sum: 1 }
}
},
{ $unwind: '$date' }
Однако общая сумма $ не является точной и повторяется для каждой записи branchId. Как я могу изменить вышеуказанные запросы для получения желаемого результата? Любая помощь будет принята с благодарностью.