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

Symfony旧系统mongoimport报错:unknown operator: $id求助

解决MongoDB 3.2 mongoimport识别$id格式ObjectID失败的问题

错误原因

你导出的JSON文档中,_id字段使用了Doctrine MongoDB ODM序列化的{"$id": "xxx"}格式,但MongoDB 3.2版本的mongoimport工具仅支持原生MongoDB ObjectID格式{"$oid": "xxx"},因此触发unknown operator: $id错误,导致数据无法正常导入。

解决方案(无需大规模升级系统)

方案1:修改导出逻辑(推荐,若可调整代码)

在Symfony项目的Doctrine ODM导出逻辑中,将ObjectID序列化为MongoDB原生的$oid格式:

  • 确保导出时直接使用MongoDB的ObjectId类型输出,而非Doctrine封装的格式;
  • 若使用序列化器,可配置对应的类型处理器,将ObjectID序列化为{"$oid": "..."}格式。

方案2:预处理JSON文件(快速修复,无需改代码)

如果无法修改导出逻辑,直接批量替换JSON文件中的$id为$oid:

  • Linux/macOS 使用sed命令:
sed -i 's/"\$id"/"\$oid"/g' path/to/items_to_import.json
  • Windows 使用PowerShell命令:
(Get-Content path/to/items_to_import.json) -replace '"$id"', '"$oid"' | Set-Content path/to/items_to_import.json

处理后,单条数据格式应为:

{"_id":{"$oid":"63ad55eb3c7d2216d8134158"},"current_fields":{"field1":"1234","field2":"blablabla"}}

执行导入命令

完成格式修正后,重新运行原导入命令即可正常新增/更新数据:

mongoimport --db dbname --collection collectionname --upsert --file path/to/items_to_import.json

内容的提问来源于stack exchange,提问作者PromelitDev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:27:06