在 mongosh 中将一大堆文档从一个集合复制到另一个集合

问题描述 投票:0回答:1

我正在尝试将一个集合中的一百万个文档复制到另一个集合中。

> db.source_collection.find().forEach(function(doc) { db.dest_collection.insertOne(doc)});

这很好用。但我想知道如果我循环一百万个文档,它可能会对操作数据库造成任何麻烦。

我可以在 mongh shell 中循环时睡觉吗? 有没有更好的解决方案?

请多多指教

mongodb mongo-shell
1个回答
0
投票

您可以使用 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()方法执行批量操作,然后重新初始化批量操作。最后,在处理完所有文档后,代码执行剩余的批量操作。

© www.soinside.com 2019 - 2024. All rights reserved.