@Denis1111

Почему в ISOdate первый день месяца это последний день предыдущего?

Я пытаюсь сделать агрегацию в 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 документов.
  • Вопрос задан
  • 150 просмотров
Пригласить эксперта
Ответы на вопрос 1
alexbuki
@alexbuki
программист js
Скорее всего срабатывает локализация, нужно поставить таймзону
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы