我目前有这段代码循环遍历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中执行此操作吗?
答案 0 :(得分:0)
创建一个列表,并将每个更新添加为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)