次のエラーが表示されます(MongoDB 3.2をダンプ)(MongoDB 3.4を復元):
Failed: ngivr-dev.ledgerhelpers: error creating indexes for ngivr-dev.ledgerhelpers: **createIndex error:** **The field 'safe' is not valid for an index specification.** Specification: **{ unique: true, name: "ledgerId_1", safe: null, ns: "ngivr-dev.ledgerhelpers", background: true, key: { ledgerId: 1 } }**
安全なインデックスがnullのようです。しかし、MongoDB 3.4でどのように使用できますか? 3.2は大丈夫です。
safe=true
はインデックスの仕様ではありません。
MongoDBの以前のバージョン(3.4より前)では、追加のインデックス仕様を追加できます。これらは特定のドライバーによって使用されました。
3.4では、mongodbがインデックス仕様の検証を追加しました。
そのため、このエラーが発生します。 3.2バージョンのインデックスに無効なインデックス仕様が含まれていないことを確認し、その後mongodumpを実行する必要があることを恐れています。
Kz_sergeyが答えで言っているように、 --noIndexRestore
を使用してmongorestore
を実行できます。
なぜインデックスを復元するのですか? --noIndexRestoreを作成し、再度作成します。
Aymericのコメントの精神で、このawkワンライナーを使用して、.metadata.jsonファイルの「safe」プロパティを置き換えることができます。
awk -i inplace '{gsub(",\"safe\":null", ""); print}' *.metadata.json
find . -type f -name "*.metadata.json" -exec sed -i 's/,"safe":null//g' {} \;