node.js - Node.js 和 Mongoose - Cast to date 值失败(过滤 created_at 日期)
问题描述
我正在创建一个搜索端点,它将通过日期范围过滤结果。
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' } }
但是我收到以下错误。
模型“Transaction”的路径“created_at”中的值“{ lte: '2018-10-03T14:07:03.382Z'}”的转换至今失败
解决方案
简短的回答:应该是$lte
,不是lte
。
长答案:
关于在猫鼬中使用日期,您需要了解一些非常好的教程。
假设您有一个架构,其中声明了类型为Date
.
创建文档时,Mongoose 会使用 Date() 构造函数将值转换为原生 JavaScript 日期。
验证文档时,无效日期将导致 CastError。
由于缺少$
符号,您的查询被接受,例如“查找created_at
对象相等的交易{ lte: '2018-10-03T14:07:03.382Z' }
”。
Mongoose 将尝试将此值转换为日期。
new Date({ lte: '2018-10-03T14:07:03.382Z' });
显然这不是一个有效的日期,并且这个表达式将失败并显示CastError
.
推荐阅读
- excel - 在堆积条形图中添加多条垂直线
- json - 在 Spark 中解析嵌套的 JSON 并实施自定义模式
- c - 为什么 scanf() 似乎加载的地址低于我正在写入的缓冲区的地址?
- r - 使用多个变量进行透视?
- java - java.lang.NoClassDefFoundError: io/grpc/netty/shaded/io/netty/util/concurrent/DefaultPromise$1 在使用 DialogFlow Java 客户端
- javascript - 检查 SerializedArray 中是否存在键
- excel-formula - Excel 公式:SUM 与 ROW 的正确语法?
- scala - 如何向函数提取摘要添加类型检查
- video - FFmpeg 屏幕混合模式将图像变为粉红色
- javascript - 函数内部的for循环以查找匹配的值javascript