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