#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(),
}
}
}