javascript - 使用 findOneAndUpdate() 时投射到日期失败
问题描述
我在 findOneAndUpdate() 的“更新”部分的日期字段中收到 CastError。我创建了以下测试来表示问题。据我了解,“2018-10-03T14:07:03.382Z”应该是通过 Mongoose 进行投射和更新的有效格式。我发现了大量类似的 SO 帖子,并使用 moment.js 将我的初始变量转换为各种格式,但看起来像上面这样的基本 ISO 字符串实际上应该可以工作。
我已经尝试调整为 $lte,在 findOneAndUpdate() 之外转换为 Date,使用 YYYY-MM-DD 格式,首先解析为 int 等,但我真的被我可能遗漏的东西弄得不知所措。如果这非常明显,请道歉。
常量更新T = B.findOneAndUpdate(
//filter
{
//Using the below syntax in find() works perfectly
"b_date" : {"$gte": new Date(bDateOrig)},
'b_type':bTypeOrig,
},
//update
{
//Using the below results in CastError
//if I comment the b_date line out, code runs as expected
'b_date' : {"$gte": new Date('2018-10-03T14:07:03.382Z')},
'b_type':bTypeNew,
},
//options
{new:true}
)
总而言之-我希望了解在更新日期时是否需要考虑任何细微差别-例如。什么是正确的格式:
"$gte": 新日期('2018-10-03T14:07:03.382Z')
我很乐意提供更多详细信息 - 非常感谢您的阅读!
解决方案
首先,$gte是查询运算符,但您在更新中使用了它。
其次,您的b_date
字段具有类型Date
,因此它将尝试将整个转换{"$gte": new Date('2018-10-03T14:07:03.382Z')}
为Date
. 这会导致 CastError。
推荐阅读
- mysql - bitnami 谷歌服务器上的 Cronjob 无法正常工作
- dart - 在画布上绘制许多圆圈与为它们创建自定义容器
- sql - 选择查询,对一行又一个 SQL 进行计算
- java - 使用子字符串java分隔数字
- python - Python Sounddevice 回调 time.inputBufferAdcTime 返回 0
- python - Python:为每个添加多个值
- puppeteer - Puppeteer:Shoutbox/MessageBoard 日志记录
- html - CSS 特异性优先级
- python - 使用 group by 更新表的列
- python - 添加分页,KeyError: 'url