Node.js 和 Mongoose - 值转换为日期失败(过滤创建的日期)

标签 node.js mongodb mongoose

我正在创建一个搜索端点,它将通过日期范围过滤结果。

http://0.0.0.0:3000/api/v1/transactions/search?endDate=2018-10-03T14:07:03.382Z

因此,上面的内容希望搜索截至和等于created_at日期的所有交易。

console.log(req.query.endDate) // 2018-10-03T14:07:03.382Z

这是我构建的查询的一部分

created_at = {
   gte: startDate,
   lte: endDate,
};

    let query = {
    ...query,
    created_at
}

const transactions = await Transaction.find(query);

这就是我的查询字符串的样子

{ created_at: { lte: '2018-10-03T14:07:03.382Z' } }

但是我收到以下错误。

Cast to date failed for value "{ lte: '2018-10-03T14:07:03.382Z' }" at path "created_at" for model "Transaction""

最佳答案

简短回答:应该是 $lte,而不是 lte

长答案:

有一个非常好的教程,您需要了解Working With Dates在 Mongoose 中。

假设您有一个架构,其中声明了 Date 类型的字段。

When you create a document, Mongoose will cast the value to a native JavaScript date using the Date() constructor.

An invalid date will lead to a CastError when you validate the document.

由于缺少 $ 符号,您的查询将被接受,例如“查找我的交易,其中 created_at 是一个等于 { lte: '2018-10-03T14 的对象:07:03.382Z'}"。

Mongoose 会尝试将此值转换为日期。

new Date({ lte: '2018-10-03T14:07:03.382Z' });

显然这不是一个有效的日期,并且此表达式将失败并显示 CastError

关于Node.js 和 Mongoose - 值转换为日期失败(过滤创建的日期),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52926095/

相关文章:

node.js - NodeJS 是否支持 "Import"风格的模块加载?

mongodb - 创建 MongoDB 数据库并将其路径设置为特定文件夹

node.js - 如何使用 mongoose-seeder,无法插入数据

javascript - 删除 mongodb 中具有空数组值的键

mongodb - 递增对象不起作用( mongoose、node.js、express、mongodb )

javascript - 将字符串正则表达式转换为带有标签 i 的正则表达式

javascript - 在 Electron 中禁用 nodeIntegration 有哪些限制?

mongodb - 这两个 MongoDB 查询有什么区别?

node.js - 分配给 Mongoose 枚举的 typescript 枚举?

node.js - 将新的输出和资源添加到现有的 AWS CloudFormation 堆栈