Каждые 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 из номера недели, чтобы получить число, которое меняется каждую неделю, а не каждую неделю. Затем вы можете попробовать группировать по этому номеру.