我有一个python脚本,每天收集数据并将其插入MongoDB集合(~10M文档)。有时工作失败了,我留下的部分数据对我没用。我想首先将数据插入到临时集合中,然后仅在作业完成且数据完成时将所有文档从暂存集合复制或移动到最终集合中。我似乎无法找到一个直接的解决方案来做这个“批量”类型的操作,但似乎应该有一个。
在SQL中它将是这样的:
INSERT INTO final_table
SELECT *
FROM staging_table
我认为db.collection.copyTo()可以用于此,但它似乎使目标集合成为源集合的克隆。
此外,我从中了解到:mongodb move documents from one collection to another collection我可以做以下事情:
var documentsToMove = db.collectionA.find({});
documentsToMove.forEach(function(doc) {
db.collectionB.insert(doc);
}
但似乎应该有一种更有效的方式。
那么,我如何从一个集合中获取所有文档并以最有效的方式将它们插入到另一个集合中?
注意:最终集合中已包含数据。我想要移动的新文档将添加到这些数据中,例如,如果我的登台集合有2个文档而我的最终集合有10个文档,那么在我移动登台数据后,我的最终集合中将有12个文档。 / p>
答案 0 :(得分:0)
您可以使用db.cloneCollection();见mondb cloneCollection
答案 1 :(得分:0)
如果您不再需要登台集合,只需使用重命名选项即可。
switch to admin db
db.runCommand({renameCollection:"staging.CollectionA",to:"targetdb.CollectionB"})