db.cloneCollection忽略重复键

时间:2013-10-12 22:55:57

标签: mongodb

如何使用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被中断,似乎没有办法在不擦除所有重复项目并从头重新开始的情况下“恢复”它。

1 个答案:

答案 0 :(得分:0)

您可以创建另一个名为“thing2”的集合,并在那里克隆远程集合。然后对“things2”集合的每个文档使用无序批量插入到“things”集合 - 它将忽略重复键错误,直到完成整个批量插入。

enable_disable

或者您可以使用“things2”集合中的所有文档创建一个数组,然后使用选项{ordered:false}

将其“插入”到“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();