Как сделать так, чтобы дата соответствовала номеру недели в году

#javascript #reactjs #mongodb #mongodb-query

Вопрос:

Я довольно новичок в javascript и работаю над созданием панели мониторинга. Я хочу получить количество заказов в неделю, что мне удалось сделать. Прямо сейчас я получаю номер, соответствующий неделе года, однако я хотел бы получить дату (понедельник), соответствующую этой неделе. Я включил то, что у меня есть ниже. Я был бы признателен за любую помощь или руководство о том, как это сделать. Спасибо!

  const weeklyOrders = await Order.aggregate([
      {
        $group: {
          _id: { $dateToString: { format: '%U', date: '$createdAt' } },
          orders: { $sum: 1 },
        },
      },
      { $sort: { _id: 1 } },
    ]);
 

Редактировать:

  const weeklyOrders = await Order.aggregate([
      {

        $group: {
          _id:{ $dateFromParts: {
            isoWeekYear: {$year: '$createdAt' },
            isoWeek: { $isoWeek: '$createdAt' },
            isoDayOfWeek: 1
          },
        },
         
            orders: { $sum: 1 },
          },
        },
        { $sort: { _id: 1 } },
      ]);
 

Сработало, но дата указана в формате даты ISO. Я попытался исправить это в приведенном ниже коде, но это не сработало.

  const weeklyOrders = await Order.aggregate([
      {
        $group: {
          _id:{ date: {
            $dateToString: { format: '%m-%d-%Y' },
          },
          },
            orders: { $sum: 1 },
          },
        },
        { $sort: { _id: 1 } },

      {
        $addFields:{
          date: {
            $dateFromParts: {
              isoWeekYear: {$year: '$createdAt' },
              isoWeek: { $isoWeek: '$createdAt' },
              isoDayOfWeek: 1
          }
        }
      }
    },
      ]);
 

Ответ №1:

Вы можете сделать следующее:

  1. используйте $year и $isoWeek , чтобы получить номер года и недели для определенной даты
  2. $dateFromParts используйте с, чтобы преобразовать обратно в то, что вы хотите "isoDayOfWeek": 1

Вот игровая площадка Монго для вашей справки.

Комментарии:

1. Хорошо, спасибо тебе! Есть ли способ отформатировать дату в формате ММ-ДД-ГГГГ вместо формата даты ISO? Я попытался сделать это в отредактированной части своего вопроса, но это не сработало.

2. Вы забыли указать date стоимость. попробуйте что-нибудь вроде {$dateToString: {date: $createdAt",format: "%m-%d-%Y"}