从 MongoDB Cloud 导出到本地 MongoDB(“$oid 对于存储无效。”错误)

Met*_*iel 5 import json mongodb bson mongodb-atlas

我刚刚学习 MongoDB。有没有一种简单的方法可以从 MongoDB 导出/导入数据?

手头的任务很简单:使用MongoDB Cloud,从集合中复制文档(使用位于Atlas > Collection部分中的复制文档按钮),并能够将其导入到我的本地 MongoDB 数据库中。这样做,我得到了以下结果:

{
  "_id": {"$oid":"5e666e346e781e0b34864de4"},
  "created_at":{"$date":{"$numberLong":"1583771188026"}}
}
Run Code Online (Sandbox Code Playgroud)

尝试使用将其导入到我的本地 MongoDB 中db.my_collection.insert()会导致以下错误:

WriteResult({
        "nInserted" : 0,
        "writeError" : {
                "code" : 52,
                "errmsg" : "$oid is not valid for storage."
        }
})
Run Code Online (Sandbox Code Playgroud)

所以我已经完成了研究,并且发现了 MongoDB 如何在默认情况下或在Canonical Mode下以 Extended JSON v2.0 (Relaxed mode) 创建输出数据。

那么文档确实告诉我 MongoDB 中用于导出的格式本身不支持直接导入吗?我做错了什么?

如何直接导入正在导出的内容?

小智 4

所以... MongoDB 不支持将数据导入到集合中的自己的导出格式。您的问题的解决方案只是替换

{
     "_id": {"$oid":"5e666e346e781e0b34864de4"},
     "created_at":{"$date":{"$numberLong":"1583771188026"}}
}
Run Code Online (Sandbox Code Playgroud)

为了:

{
     "_id": ObjectId("5e666e346e781e0b34864de4"),
     "created_at":{"$date":{"$numberLong":"1583771188026"}}
}
Run Code Online (Sandbox Code Playgroud)

这样您就可以毫无问题地导入数据。