为什么在使用mongorestore恢复数据之前需要将{{$ numberInt“:” 1“}`转换为1?

时间:2019-07-20 06:43:04

标签: mongodb mongorestore

我从运行在Google Cloud Platform(GCP)上的MongoDB服务器中转储了一些BSON和JSON文件,我想将数据还原到版本为4.0.3的新本地服务器中。但是,我收到错误消息,表明无法还原索引。我必须将JSON文件中的{"$numberInt": "1"}转换为1才能使恢复过程成功。为什么我需要花大力气修复转储文件的格式。是由于源服务器和目标服务器之间的版本不同还是由于某些我未正确执行的操作?

我已经搜索并搜索了堆栈溢出,但是没有人讨论这个问题。并且release note of MongoDB没有提及与此问题相关的任何更改。

这是版本4.0.3的mongorestore无法接受的JSON示例

{
    "options": {},
    "indexes": [
        {
            "v": {
                "$numberInt": "2"
            },
            "key": {
                "_id": {
                    "$numberInt": "1"
                }
            },
            "name": "_id_",
            "ns": "demo.item"
        },
        {
            "v": {
                "$numberInt": "2"
            },
            "key": {
                "itemId": {
                    "$numberDouble": "1.0"
                }
            },
            "name": "itemId_1",
            "ns": "demo.item"
        }
    ],
    "uuid": "8ce4755612da4d048b0fd38a793f2b55"
}

这是被接受的,由我自己转换。

{
    "options": {},
    "indexes": [
        {
            "v": 2,
            "key": {
                "_id": 1
            },
            "name": "_id_",
            "ns": "demo.item"
        },
        {
            "v": 2,
            "key": {
                "itemId": 1.0
            },
            "name": "itemId_1",
            "ns": "demo.item"
        }
    ],
    "uuid": "8ce4755612da4d048b0fd38a793f2b55"
}            

here是我用来进行转换的脚本。

问题:

  1. 为什么mongorestore不接受mongodump创建的转储文件?

  2. 是否有避免手动修改转储文件的方法?

1 个答案:

答案 0 :(得分:1)

您需要使用mongorestore版本4.2+,该版本支持扩展JSON v2.0(规范模式或宽松模式)格式。参见参考文献here