2017-03-26 11 views
0

を無視するのは、私は、次の2つのJSONsがあるとしましょう、と私は既存のドキュメントをマージするか、更新せずに同じコレクションにインポートしたいと思います。インポート中に既存の_idキーを無視し、以下の例の6つのドキュメントすべてを含む単一のコレクションで終了する方法はありますか?mongoimportは_idキー(E11000キーエラーインデックスを複製)

古い_idプロパティは、まったく関連性がありません。ソースファイルから名前を変更したり削除したりすることができますが、インポート時にこれを行う方法があるのか​​不思議です。

coll1.json: 
{"_id":1,"a":1} 
{"_id":2,"a":2} 
{"_id":3,"a":3} 

coll2.json: 
{"_id":1,"a":4} 
{"_id":2,"a":5} 
{"_id":3,"a":6} 

私は単にそれらをインポートする場合

は、 mongoimport --db imp --collection imp --file coll2.jsonと私はE11000重複キーエラーを取得しています。あなたはフィールド_id MongoDBの では、次のコマンド

mongoimport --db imp --collection imp --mode upsert --file coll2.json 

を使用して文書のインポートを上書きする場合

答えて

0

は、デフォルトではそうあなたカントは、あなたがあなたのケース

をしていたように同じ値で_idているユニークですあなたは、この場合に行うことができますどのような
coll1.json: 
{"_id":1,"a":1} // _id is same as document below 
{"_id":2,"a":2} 
{"_id":3,"a":3} 

coll2.json: 
{"_id":1,"a":4} // {"_id":1,"a":1} 
{"_id":2,"a":5} 
{"_id":3,"a":6} 

あなたは、IDの値が同じで、よりその後、一つの文書を持ってできるようになりますIDに_idからキーの名前を変更しています。

coll1.json: 
    {"idField":1,"a":1} 
    {"idField":2,"a":2} 
    {"idField":3,"a":3} 

    coll2.json: 
    {"idField":1,"a":4} 
    {"idField":2,"a":5} 
    {"idField":3,"a":6} 
+0

古い_idプロパティは、まったく関連性がありません。ソースファイルから名前を変更/削除することができますが、元の_idsを保持せずにデータをMongoにインポートする方法があるのでは不思議です。 – orszaczky

+0

ちょっと私はそれを見て答えを編集した - これを行うには、インポートクエリで - モードupsertを追加する必要があります。 –

+0

upsert coll2はcoll1の文書を上書きします。私はそれらをすべて保管して輸入する必要があります。 – orszaczky

関連する問題