импорт функции mongo ISODate в nodejs

#node.js #mongodb #mongoose

Вопрос:

Я пытаюсь выполнить запрос между датами. В compass я могу выполнить запрос без каких-либо проблем, используя собственную функцию ISODate() . Но при попытке в моем коде я не могу импортировать эту функцию и new Date() не предупреждаю.

Документы в качестве примера:

 let trxs = [{
    _id:612e112f7a7eaa7a5c1fd0d3
    created:2021-09-31T11:23:25.184 00:00
    amount:19.98
    user:"612e112f7a7eaa7a5c1fd0d1"
    type:"deposit"
  },
  {
    _id:612e112f7a7eaa7a5c1fd0d6
    created:2021-09-31T11:23:25.184 00:00
    amount:10
    user:"612e112f7a7eaa7a5c1fd0d4"
    type:"deposit"
  }
]
 

Запрос

 let trxs = await Transaction.aggregate([
        {
          $match: {
            type: req.query.type,
            $and: [
              {
                created:
                {
                  $gt: new Date(new Date().setHours(0, 0, 0))
                },
              },
              {
                created:
                {
                  $lt:new Date(new Date().setHours(23, 59, 59))
                }
              }
            ]
          }
        }, {
          $group: {
            _id: null,
            amount: {
              $sum: '$amount'
            }
          }
        }
      ]);
 

//Дополнительная информация:

 console.log(new Date(new Date().setHours(0, 0, 0))) // 2021-08-31T22:00:00.953Z
console.log(new Date(new Date().setHours(23, 59, 59))) // 2021-09-01T21:59:59.952Z
 

//Ошибка
ReferenceError: amount is not defined

Я попытался импортировать функцию ISODate, но не нашел способа сделать это.

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

1. Какая строка выдает вам эту ошибку?

Ответ №1:

Попробуйте moment.js библиотека. В этом нет необходимости $and: []

 {
   $match: {
     type: req.query.type,
     created: {
       $gt: moment().startOf('day').toDate(),
       $lt: moment().endOf('day').toDate(),
     }
  }
}