微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在pymongo中使用upsert?

如何解决如何在pymongo中使用upsert?

我直接将数据从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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。