ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – pymongo中的快速或批量Upsert

2019-09-25 23:56:07  阅读:607  来源: 互联网

标签:upsert python mongodb nosql pymongo


如何在pymongo中进行批量upsert?我想更新一堆条目,一次做一个是非常慢的.

几乎完全相同的问题的答案在这里:Bulk update/upsert in MongoDB?

接受的答案实际上没有回答这个问题.它只是提供了一个指向mongo CLI的链接,用于执行导入/导出.

我也愿意向某人解释为什么做大量upsert是不可能/没有最佳做法,但请解释这类问题的首选解决方案是什么.

解决方法:

MongoDB 2.6支持批量操作.这包括批量插入,插入,更新等.这样做的目的是减少/消除执行逐个记录操作的往返延迟(“逐个文档”是正确的)的延迟.

那么,这是如何工作的? Python中的示例,因为这就是我正在从事的工作.

>>> import pymongo
>>> pymongo.version
'2.7rc0'

要使用此功能,我们创建一个“批量”对象,向其中添加文档,然后在其上调用execute,它将立即发送所有更新.注意事项:收集的操作的BSONsize(bsonsizes的总和)不能超过16 MB的文档大小限制.当然,操作次数因此可能会有很大差异,您的里程可能会有所不同.

Bulk upsert操作的Pymongo示例:

import pymongo
conn = pymongo.MongoClient('myserver', 8839)
db = conn['mydbname']
coll = db.myCollection
bulkop = coll.initialize_ordered_bulk_op()
retval = bulkop.find({'field1':1}).upsert().update({'$push':{'vals':1}})
retval = bulkop.find({'field1':1}).upsert().update({'$push':{'vals':2}})
retval = bulkop.find({'field1':1}).upsert().update({'$push':{'vals':3}})
retval = bulkop.execute()

这是必不可少的方法.更多信息,请访问:

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]

标签:upsert,python,mongodb,nosql,pymongo
来源: https://codeday.me/bug/20190925/1817680.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有