Я пытаюсь сделать агрегацию в mongoose. Моя задача сгруппировать документы(числа) по месяцам, и проблема в том, что mongodb почему-то кладёт 1 число текущего месяца в объект предыдущего. То есть, если есть отчёт за 1 число этого месяца, то в ISO формате это 31 число предыдущего месяца, а этот документ должен входить в массив текущего месяца, а не прошлого. Такая же проблема и с первым днём след. месяца, который группируется в текущий месяц. Мне приходится постоянно делать проверки, что предоставляет мне неудобство. Есть ли какие-то способы решить данную проблему?
await Table.aggregate([
{
$match: {
date: {$ne: null}
}
},
{
$group: {
_id: {
month: { $month: '$date' }
},
doc: { $push: "$$ROOT" },
count: { $sum: 1 }
}
},
{
$sort: {
'_id.month': -1
}
}
]).exec();
Output:
[ { _id: { month: 8 },
doc: [ [Object], [Object], [Object], [Object], [Object] ],
count: 5 },
{ _id: { month: 7 },
doc:
[ [Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object],
[Object] ],
count: 31 },
{ _id: { month: 6 }, doc: [ [Object] ], count: 1 } ]
6 месяца быть не должно, это { _id: { month: 6 }, doc: [ [Object] ], count: 1 } 1 число 7 месяца, а
{ _id: { month: 7 },
doc:
[ [Object], первый докумен 7 месяца это 1 число след.(8-го месяца), это значит, что там должно быть 6, а не 5 документов.