【发布时间】:2019-12-02 05:09:19
【问题描述】:
假设 MongoDB 集合包含必须定期更新新字段或子对象的文档;或者,如果文档尚不存在,则常规文档更新过程应插入新文档(典型的 upsert)。
实现这一目标的最快方法是什么?目前我有一个非常缓慢的三个阶段的过程:
第 1 阶段:根据包含其 customID 的列表查找必须更新的文档(customID 字段上存在索引)。
db[myCollection].find({'customID': {'$in': myUpdateList}})
第 2 阶段:迭代在第 1 阶段检索到的光标中的文档,用新字段和/或子对象丰富它们。将尚未在数据库中尚未更新的新文档添加到同一文档列表中。
第 3 阶段:使用无序批量操作更新插入 MongoDB。
bulk_mapping = db[myCollection].initialize_unordered_bulk_op()
for key, value in enrichedDocs.items():
bulk_mapping.find({'customID': key}).upsert().update({'$set': {'customID': key, 'enrichedBody': value['enrichedBody']}})
bulk_mapping.execute()
【问题讨论】:
标签: mongodb pymongo bulkinsert insert-update upsert