Каждые 2 недели
Вот как группировать данные еженедельно:
transactions.aggregate({
[
{$match: {status: "committed"}},
{$group: {
_id: {
$year: "$date",
$week: "$date"
},
count: {$sum: 1},
start_date: {$min: "$date"},
end_date: {$max: "$date"}
}}
]
});
Вопрос: как насчет группировки каждые 2 недели и получения счета?
Спасибо.
ПРАВИЛЬНЫЙ ПУТЬ ПО ПРИНЯТОМ ОТВЕТУ
Благодаря Mzzl это работает для группировки каждые 2 недели. Ниже приведена полная версия.
db.transactions.aggregate([
{$match: {status: "committed"}},
{$project: {
twoweekperiod: {
$subtract: [
{$week: "$date"}, {$mod: [{$week: "$date"}, 2] }
]
},
date:1,
status:1
}},
{$group: {
_id: {
year: {$year: "$date"},
twoweek: "$twoweekperiod"
},
count: {$sum: 1},
start_date: {$min: "$date"},
end_date: {$max: "$date"}
}}
])
Ответы
Ответ 1
Предполагая, что $week содержит номер недели, вы можете создать число "каждые две недели" и группу. Попробуйте что-то вроде этого:
{
$project: {
twoweekperiod: {
$subtract: [
'$week', {$mod: ['$week', 2] }
]
}, status:1, date:1, etc...
}
}
Я не знаю, как сделать целочисленное разделение в mongo-запросе, поэтому вместо этого вычитаю weeknumber mod 2
из номера недели, чтобы получить число, которое меняется каждую неделю, а не каждую неделю. Затем вы можете попробовать группировать по этому номеру.