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
相关产品推荐
相关产品推荐

