2013-10-12 16 views
5

MongoDBでコレクションを複製し、重複するキーを無視するにはどうすればよいですか?db.cloneCollectionは重複キーを無視する

$ mongo items 
MongoDB shell version: 2.4.6 
connecting to: items 
> db.cloneCollection('localhost:27018', 'things') 
{ 
    "errmsg" : "exception: E11000 duplicate key error index: items.things.$_id_ dup key: { : ObjectId('52558bebdedc25038ed26d58') }", 
    "code" : 11000, 
    "ok" : 0 
} 

さらに、リモートコレクションをローカルコレクションにマージするより安全な方法がありますか? db.cloneCollectionが中断された場合は、重複したアイテムをすべて拭き取り、最初から再起動することなく "再開"する方法はないようです。

答えて

0

「things2」という名前の別のコレクションを作成し、そこにリモートコレクションをクローンすることができます。その後、 "things2"コレクションの各ドキュメントの "things"コレクションに順序付けられていない一括挿入を使用します。一括挿入全体が完了するまで重複キーエラーは無視されます。

db.cloneCollection('localhost:27018', 'things2'); 
 

 
var cursor = db.things2.find(); null; 
 

 
var bulk = db.things.initializeUnorderedBulkOp(); 
 

 

 
cursor.forEach(function(doc) { 
 
    bulk.insert(doc); 
 
}); 
 

 
bulk.execute();

またはあなたが「things2」コレクションからすべての文書を持つ配列を作成し、オプションで「もの」コレクションに「挿入」することができます{注文:偽}

db.cloneCollection('localhost:27018', 'things_2'); 
 

 
var things2array = db.things2.find().toArray(); null; 
 

 
db.things.insert(things2array,{ ordered : false });

関連する問題