【发布时间】:2015-04-27 22:17:59
【问题描述】:
我从服务中收到一份过期文件列表。我想将这些文档从我的主要收藏中删除到存档收藏中。我收到的一些文件不会在我的主要收藏中,我想忽略这些文件。
我可以先在我的主集合中找到该文档,如果我发现它会将文档插入存档,然后在成功时将其从主集合中删除。
是否可以使用批量操作进行这种有条件的移动?我需要它能够一次合理地快速处理可能数千个文档。
【问题讨论】:
-
node.js - 我将其添加到问题中
我从服务中收到一份过期文件列表。我想将这些文档从我的主要收藏中删除到存档收藏中。我收到的一些文件不会在我的主要收藏中,我想忽略这些文件。
我可以先在我的主集合中找到该文档,如果我发现它会将文档插入存档,然后在成功时将其从主集合中删除。
是否可以使用批量操作进行这种有条件的移动?我需要它能够一次合理地快速处理可能数千个文档。
【问题讨论】:
是的。您可以批量查找、插入和删除操作。您可以使用bulk write operation 进行插入。听起来您有一个_id 或类似文档的列表,用于在主集合中查找文档。您应该使用$in 将查找结果分成 1-2 千组:
> my_cursor = db.main.find({ "_id" : { "$in" : [ **1-2K _id's** ] } })
如果_id 不在主集合中,那么没什么大不了的。使用批量操作插入游标的结果:
> my_bulk_insert = db.archive.initializeUnorderedBulkOp()
> my_cursor.forEach(function(doc) {
my_bulk_insert.insert(doc)
}
> my_bulk_insert.execute()
您将被告知任何错误。插入成功后,从 main 中删除文档
> db.main.remove({ "_id" : { "$in" : [ **1-2K _id's** ] } })
【讨论】: