Node.js和Mongoose-值的转换到日期失败(筛选在日期创建的\u)
我正在创建一个搜索端点,该端点将通过日期范围过滤结果Node.js和Mongoose-值的转换到日期失败(筛选在日期创建的\u),node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正在创建一个搜索端点,该端点将通过日期范围过滤结果 http://0.0.0.0:3000/api/v1/transactions/search?endDate=2018-10-03T14:07:03.382Z 因此,上面的代码希望搜索所有在创建的_之前的事务 console.log(req.query.endDate) // 2018-10-03T14:07:03.382Z 这是我构建的查询的一部分 created_at = { gte: startDate, lte: en
http://0.0.0.0:3000/api/v1/transactions/search?endDate=2018-10-03T14:07:03.382Z
因此,上面的代码希望搜索所有在创建的_之前的事务
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' } }
但是,我得到了以下错误
对于位于的值“{lte:'2018-10-03T14:07:03.382Z'}”,到目前为止的强制转换失败 模型“事务”的路径“已创建”
简短回答:应该是
$lte
,而不是lte
长答案:
有相当好的教程,你需要了解猫鼬
假设您有一个模式,其中声明了类型为Date
的字段
创建文档时,Mongoose将使用date()构造函数将值转换为本机JavaScript日期
当您验证文档时,无效日期将导致错误
由于缺少$
符号,您的查询被接受,就像“在处创建的是一个等于{lte:'2018-10-03T14:07:03.382Z'}
的对象”一样
Mongoose将尝试将此值转换为日期
new Date({ lte: '2018-10-03T14:07:03.382Z' });
显然,这不是一个有效的日期,并且这个表达式将失败,因为路径“created_at”处的值“{lte:2018-10-03T14:07:03.382Z}”对于模型“Transaction”的值“{lte:2018-10-03T14:07:03.382Z}”的Cast to date failed”也错过了$
符号,只是更新了答案,请再试一次,因为它工作得太多了。顺便说一句,我不需要做新的日期,如果它已经对你更好:)旧的答案不是很准确。这里我用更详细的解释来代替它