You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 04:09:41