在pymongo快速或批量Upsert
如何在pymongo中进行批量upsert?我想更新一堆条目,一次做一个是非常慢的。
几乎完全相同的问题的答案在这里:MongoDB中的批量更新/ upsert?
接受的答案实际上没有回答这个问题。它只是提供了一个指向mongo CLI的链接,用于执行导入/导出。
我也愿意向某人解释为什么做大量upsert是不可能/没有最佳做法,但请解释这类问题的首选解决方案是什么。
没有找到相关结果
已邀请:
6 个回复
俯乡骚钵皆
要使用此功能,我们创建一个“批量”对象,向其中添加文档,然后在其上调用execute,它将立即发送所有更新。注意事项:收集的操作的BSONsize(bsonsizes的总和)不能超过16 MB的文档大小限制。当然,操作次数因此可能会有很大差异,您的里程可能会有所不同。 Bulk upsert操作的Pymongo示例:
这是必不可少的方法。更多信息,请访问: http://api.mongodb.org/python/2.7rc1/examples/bulk.html 编辑: - 从3.5版本的python驱动程序,不推荐使用initialize_ordered_bulk_op。请改用bulk_write()。 [http://api.mongodb.com/python/current/api/pymongo/collection.html#pymongo.collection.Collection.bulk_write]
冲汉
,而使用
其他适当的操作操作。现在,当然最好使用自然语言列表而不是特定的构建器 旧文件的直接翻译:
或者经典的文档转换循环:
返回的结果为
,其中包含匹配和更新文档的计数器以及发生的任何“upserts”的返回值
。 关于批量操作数组的大小存在一些误解。发送到服务器的实际请求不能超过16MB BSON限制,因为该限制也适用于发送到使用BSON格式的服务器的“请求”。 但是,这不会控制您可以构建的请求数组的大小,因为实际操作只会以1000的批量发送和处理。唯一真正的限制是这1000条操作指令本身实际上并不创建大于16MB的BSON文档。这确实是一个非常高的订单。 批量方法的一般概念是“较少流量”,这是因为一次发送许多内容并且只处理一个服务器响应。减少每个更新请求附带的开销可以节省大量时间。
郸身
倪蕊悲潍
课刊灭似
鞋扣蚊冈借
我的英语很差,如果你不明白我说的话,我很抱歉