问题描述
我直接将数据从postgresql转换为json并将其传输到mongo。
sql= """select array_to_json(array_agg(row_to_json(a))) from(select * from {}) a ; """.format(row[0])
cursor.execute(sql_etl)
data = cursor.fetchall()
data=data[0][0]
if isinstance(data,list):
collection.insert_many(data,upsert=True)
else:
collection.insert_one(data)
我正在为此使用insert_many。但是我得到与insert_many重复。 Pymongo也有重复的upsert。在update_many函数中使用。如何在update_many中使用此upsert?
解决方法
您可以使用bulk_write
执行多次写操作。
和ReplaceOne
进行“ upsert”查询
from pymongo import ReplaceOne
upserts = [ReplaceOne({"_id": x["_id"]},x,upsert=True) for x in data]
collecion.bulk_write(upserts,ordered=True)