2016-12-08 2 views
15

保存、3.2からダンプ3.4で復元し、エラーインデックスIは、(MongoDBの3.4を復元)(MongoDBの3.2をダンプ)は、次のエラーが表示されます。安全なインデックスがnullであるようMongoDBの= nullを

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 } }** 

が見えます。しかし、MongoDB 3.4でどのように使用できますか? 3.2は大丈夫です。

答えて

35

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

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

、MongoDBはインデックス仕様の検証を追加しました:

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

あなたはこのエラーを持っている理由です。 3.2バージョンのインデックスに無効なインデックス指定がないことを確認し、その後でmongodumpを実行する必要があります。

kz_sergeyさんの回答によれば、mongorestoreを使用して--noIndexRestoreを使用しても問題ありません。

+5

'--noIndexRestore'オプションは' mongorestore'コマンドではなく、 'mongodump'コマンドで使用されるべきです。 – Keith

+1

あなたは完全に正しいです:私はmlabを使ってmongodbをホストしています。必要に応じてバージョンを更新しました(2.xから3.2へ)。古いインデックス(2.xで作成されたもの)安全:ヌル。私にとっては、インポートの問題を作成したのはこの古い仕様でした。問題を解決せずにこれらのインデックスを再作成しました。タンク! – Etienne

13

なぜインデックスを復元しますか? --noIndexRestoreを作成し、それらを再度作成します。私はあなたがそれらを復元する前に、あなたのダンプファイルをサニタイズすることを可能にするスクリプトを作成

2

を、あなたはあなたの中に「安全」プロパティを置き換えるために、このAWKワンライナーを使用することができます。 metadata.jsonファイル。

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

0
find . -type f -name "*.metadata.json" -exec sed -i 's/,"safe":null//g' {} \; 
+2

いくつかの説明がいいだろう。 – tkruse

+1

このコードは質問に答えるかもしれませんが、** how **と** ** **に関する問題を解決する理由についての追加の文脈を提供することで、回答の長期的価値が向上します。 – Alexander

関連する問題