我正在尝试将一个集合中的一百万个文档复制到另一个集合中。
> db.source_collection.find().forEach(function(doc) { db.dest_collection.insertOne(doc)});
这很好用。但我想知道如果我循环一百万个文档,它可能会对操作数据库造成任何麻烦。
我可以在 mongh shell 中循环时睡觉吗? 有没有更好的解决方案?
请多多指教
您可以使用 bulkWrite() 而不是 insertOne ,它会大大减少您的时间。
var bulk = db.dest_collection.initializeUnorderedBulkOp();
var counter = 0;
db.source_collection.find().forEach(function(doc) {
bulk.insert(doc);
counter++;
if (counter % 1000 == 0) {
bulk.execute();
bulk = db.dest_collection.initializeUnorderedBulkOp();
}
});
if (counter % 1000 != 0) {
bulk.execute();
}
这段代码中对于每1000个文档,代码使用execute()方法执行批量操作,然后重新初始化批量操作。最后,在处理完所有文档后,代码执行剩余的批量操作。