什么是"创造"在mongo转储文件?

时间:2017-12-12 08:13:52

标签: json mongodb mongodump mongorestore

我正在尝试从dump恢复mngo数据库。这是sessions.metadata.json代码段:

{
  "options": {
    "create": "sessions",
    "flags": 1
  },
  "indexes": [
    {
      "v": 1,
      "name": "_id_",
      "key": {
        "_id": 1
      },
      "ns": "myPrefix.sessions"
    },
    {
      "v": 1,
      "name": "expires_1",
      "key": {
        "expires": 1
      },
      "ns": "myPrefix.sessions",
      "expireAfterSeconds": 0
    }
  ]
}

源mongo db版本为2.4目标mongo为3.6。我得到错误:

Failed: myPrefix.sessions: error creating collection myPrefix.sessions: error running create command: Parsed command object contains duplicate top level key: create

当我发现其他metadata.json文件无法正常恢复时,不包含options部分。为什么需要它?我可以安全地从options删除sessions.metadata.json部分吗?

2 个答案:

答案 0 :(得分:0)

可能为时已晚,但是我面临着完全相同的问题(mongo 2.4到mongo 3.6 dump),解决方案是在进行mongorestore之前手动创建数据库和集合。 这可能会跳过语句的create部分,从而避免了我认为是不同版本的mongodump / restore之间的导入错误。

答案 1 :(得分:0)

MongoDB 3.4服务器也遇到了相同的问题:

2019-12-18T09:19:14.881+0100  reading metadata for my_db.posts from dump/my_db/posts.metadata.json
2019-12-18T09:19:14.882+0100  creating collection my_db.posts using options from metadata
2019-12-18T09:19:14.883+0100  Failed: my_db.posts: error creating collection my_db.posts: error running create command: Parsed command object contains duplicate top level key: create

查看dump/my_db/posts.metadata.json文件的内容,我发现:

{ "options" : { "create" : "posts" }, "indexes" : [ { "v" : 1, "name" : "_id_", "key" : { "_id" : 1 }, "ns" : "my_db.posts" } ] }

我还检查了另一个有效的集合,该集合未包含此options属性。

将其删除并重新运行mongorestore解决了该问题。我还有几个文件需要删除此options属性,然后还原正常完成。