Node.js操作MongoDB upsert时报unknown operator: $date错误咨询
错误产生原因
$date 是MongoDB扩展JSON规范中用于标识日期类型的特殊语法,不属于MongoDB服务端可识别的CRUD操作符。
直接将{ '$date': '2017-02-14T00:00:00Z' }作为_id字段值传入upsert语句时,MongoDB服务端会默认将所有以$开头的字段名识别为操作符,解析时找不到名为$date的操作符,就会抛出对应的错误。
这类写法通常出现在直接复用MongoDB导出的扩展JSON原始数据、未做类型转换就直接传入驱动执行的场景。
修复方案
- 手动构造文档时,不要手写
$date结构,直接传入JavaScript原生Date对象即可,Node.js MongoDB驱动会自动完成日期类型的序列化,不会触发操作符解析逻辑:
// 正确的待写入文档结构 const record = { _id: new Date('2017-02-14T00:00:00Z'), dayType: 'weekday', endOfMonth: false, finEndOfMonth: false, _entity: [ 'holiday' ] } // 执行upsert操作示例 db.collection('目标集合名').updateOne( { _id: record._id }, { $set: record }, { upsert: true } )
- 如果数据源是MongoDB导出的整段扩展JSON内容,不要直接使用
JSON.parse()解析后传入,要使用MongoDB驱动自带的扩展JSON反序列化方法转换为原生JS对象,自动将$date这类标识转换为对应类型值,避免非法结构传入服务端。
内容的提问来源于stack exchange,提问作者lushan848
相关产品推荐
相关产品推荐

