如何使用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
}
Run Code Online (Sandbox Code Playgroud)
更好的是,是否有更安全的方式将远程集合与本地集合合并?如果db.cloneCollection被中断,似乎没有办法在不擦除所有重复项目并从头重新启动它的情况下"恢复"它.
您可以创建另一个名为“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();Run Code Online (Sandbox Code Playgroud)
或者您可以使用“things2”集合中的所有文档创建一个数组,然后使用选项 {ordered: false} 将其“插入”到“things”集合中
db.cloneCollection('localhost:27018', 'things_2');
var things2array = db.things2.find().toArray(); null;
db.things.insert(things2array,{ ordered : false });Run Code Online (Sandbox Code Playgroud)