MongoDB dump from 3.2, restore with 3.4, error index safe = null

后端 未结 4 931
忘了有多久
忘了有多久 2020-12-25 12:11

I get the following error (dump MongoDB 3.2) (restore MongoDB 3.4):

Failed: ngivr-dev.ledgerhelpers: error creating indexes for ngivr-dev.ledgerhelpers: **cr         


        
相关标签:
4条回答
  • 2020-12-25 12:14

    Why do you restore indexes? --noIndexRestore and create them again.

    0 讨论(0)
  • 2020-12-25 12:14

    In the spirit of Aymeric's comment, you can use this awk one-liner to replace the "safe" property in your .metadata.json files.

    awk -i inplace '{gsub(",\"safe\":null", ""); print}' *.metadata.json

    Run it in the directory of your MongoDB export. This approach allows you to keep the indexes, but drop the "safe" option.

    0 讨论(0)
  • 2020-12-25 12:18
    find . -type f -name "*.metadata.json" -exec sed -i 's/,"safe":null//g' {} \;
    

    This works and you will keep your indexes! It find all files in the present location (.) then using the same process (exec) replace in file (sed -i) according to the following regex which is basically saying all occurrences of "safe":null with nothing.

    Replace the "." argument with the path to the directory where your mongodb exports are stored.

    0 讨论(0)
  • 2020-12-25 12:23

    safe=true is not an index specification.

    In previous versions of MongoDB, lower than 3.4, extra indexes specifications can be added. Those were used by specific drivers.

    In 3.4, mongodb added a validation on indexes specification:

    Ensuring that the specified index options are valid. Previous versions ignored invalid options.

    That's why you have this error. I am afraid you need to ensure that the index in your 3.2 version does not have invalid index specificaitons, and after that do the mongodump.

    As kz_sergey says in his answer, you can mongorestore using --noIndexRestore, that should work fine.

    0 讨论(0)
提交回复
热议问题