web-dev-qa-db-ja.com

3.2からのMongoDBダンプ、3.4での復元、エラーインデックスセーフ= null

次のエラーが表示されます(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は大丈夫です。

27
Patrik Laszlo

safe=trueはインデックスの仕様ではありません。

MongoDBの以前のバージョン(3.4より前)では、追加のインデックス仕様を追加できます。これらは特定のドライバーによって使用されました。

3.4では、mongodbがインデックス仕様の検証を追加しました。

指定されたインデックスオプションが有効であることを確認します。以前のバージョンは無効なオプションを無視しました。

そのため、このエラーが発生します。 3.2バージョンのインデックスに無効なインデックス仕様が含まれていないことを確認し、その後mongodumpを実行する必要があることを恐れています。

Kz_sergeyが答えで言っているように、 --noIndexRestore を使用してmongorestoreを実行できます。

56
sergiuz

なぜインデックスを復元するのですか? --noIndexRestoreを作成し、再度作成します。

23
kz_sergey

Aymericのコメントの精神で、このawkワンライナーを使用して、.metadata.jsonファイルの「safe」プロパティを置き換えることができます。

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

3
Benjamin Ki
find . -type f -name "*.metadata.json" -exec sed -i 's/,"safe":null//g' {} \;
1
user9202717