如何在Pymongo中进行批量改写

时间:2020-03-30 09:41:08

标签: pymongo

我目前有这段代码循环遍历mongoDB收集表中的每一行,并插入一行或使用新数据更新一行(取决于今天的日期和学生ID是否存在):

for rowindex, row in InsertionData.iterrows():
    record = row.to_dict()
    record['date'] = datetime.datetime.combine(datetime.date.today(), datetime.time(0, 0))
    collection.replace_one({'student': row.get('student'), 'date': record['date']}, record, upsert=True)

但是,我想知道是否有一种方法可以进行批量追加?

我的想法是它将遍历所有要更新的记录,创建更新脚本并将其添加到操作数组。然后,一旦它用完记录或达到5000个记录,它将对Mongo运行bulkWrite函数,该函数基本上向Mongo服务器发送一个请求,而不是5000个单个请求。 这将使其变得更快,因为最大的减慢是服务器之间的通信,而不是实际的更新功能本身。

有人知道如何在python / pymongo中执行此操作吗?

1 个答案:

答案 0 :(得分:0)

使用Bulk Write Operations

创建一个列表,并将每个更新添加为ReplaceOne,例如

operations = []
for rowindex, row in InsertionData.iterrows():
    record = row.to_dict()
    record['date'] = datetime.datetime.combine(datetime.date.today(), datetime.time(0, 0))
    operations.append(ReplaceOne({'student': row.get('student'), 'date': record['date']}, record, upsert=True))

collection.bulk_write(operations)