无法将本地MongoDB数据库的ObjectId导入mLab在线集合
解决本地MongoDB数据导入mLab时ObjectId的JSON格式问题
嘿,我之前也踩过这个坑!直接复制粘贴带ObjectId()的文档肯定会报错,因为标准JSON压根不认识MongoDB这个自定义类型。给你几个实用的解决办法,按需选择就行:
方法1:用MongoDB官方工具(最稳妥,适合大量数据)
这是最推荐的方式,能完美保留所有MongoDB原生类型(包括ObjectId、日期这些),步骤也简单:
- 先从本地数据库导出数据:
执行后会生成一个mongodump --db 你的本地数据库名 --collection 你的集合名dump文件夹,里面包含对应数据库和集合的BSON文件。 - 再把导出的BSON文件导入mLab:
把命令里的占位符换成你自己的信息就行,mLab的连接URI在你的数据库详情页里就能找到。mongorestore --uri mongodb://你的mLab用户名:密码@mLab主机地址:端口号/mLab数据库名 --collection 目标集合名 ./dump/你的本地数据库名/你的集合名.bson
方法2:手动修改为MongoDB扩展JSON格式(适合少量文档)
如果只有几个文档需要导入,手动修改格式也挺快的。把原来的ObjectId("xxx")替换成MongoDB兼容的扩展JSON格式{"$oid": "xxx"}。
比如你的示例文档修改后应该是这样:
{ "_id" : {"$oid": "5a8ae78844a5ba0d448a4cf7"}, "ratings" : [], "reviews" : [], "title" : "The Shape of Water", "director" : "Guillermo Del Toro", ... }
这种格式mLab的集合导入功能是完全支持的,改完再粘贴就不会报错了。
方法3:用Mongo Shell导出兼容JSON
如果不想用BSON,也可以用Mongo Shell直接导出带有$oid格式的JSON文件:
mongo 你的本地数据库名 --eval 'db.你的集合名.find().forEach(function(doc) { printjson(doc); })' > export.json
导出的export.json文件里的文档都是mLab能识别的格式,直接拿去导入就好,不用手动修改。
内容的提问来源于stack exchange,提问作者tilly
相关产品推荐
相关产品推荐

