5

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

$ 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、重複するアイテムをすべて消去して最初からやり直すことなく「再開」する方法はないようです。

4

1 に答える 1

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」コレクションのすべてのドキュメントを含む配列を作成し、オプション {ordered: false } を使用して「things」コレクションに「挿入」できます。

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

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

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

于 2015-11-24T11:27:52.173 に答える