gpt4 book ai didi

python - mongoengine bulk upsert 一批记录?

转载 作者:行者123 更新时间:2023-12-05 08:57:22 25 4
gpt4 key购买 nike

我想upsert(update or insert)一个记录列表,其实我知道mongodb从mongodb3.0开始支持bulk操作。

想知道mongoenginemongoengine(0.10.0)中是否支持bulk upsert操作

如果没有,我想知道如何upsert记录列表,我知道mongoengine支持像这样的insert批处理:

class User(Document):
username = StringField(required=True)
password = StringFiedl(required=True)
meta = {'db_alias': 'user_info', 'collection': 'user',
'indexes': [{'fields': ['username'], 'unique': True}]
}

def save_users(self, users):
Users.objects.insert(users) # raise mongoengine.errors.NotUniqueError

最佳答案

您实际上可以使用 bulk operations API直接通过从 MongoEngine 使用的 pymongo 驱动程序访问底层集合对象。 MongoDB 本身从 2.6 版本开始就支持批量操作。自 pymongo 驱动程序的 v3 以来,有更新的方法来访问它们,但是自相应的驱动程序更新到 2.6 服务器版本 (pymongo 2.7) 以来,基本方法已经存在。

要通过 MongoEngine 获得此信息,您可以从您的类中调用未记录的 ._get_collection() 以返回 collection对象:

bulk = Users._get_collection().initialize_ordered_bulk_op()

for user in users: # where users is a list of dicts containing data to work on
bulk.find({ "matchField": user['matchField'] }).upsert().replace_one(user)

bulk.execute()

bulk methods 的任何其他用法例如您可能想要的 .update_one() 。和 .upsert()是修改此类更新语句的链式方法。

您在这里使用的是原始 python 对象,因为 MongoEngine 本身没有直接的等效对象。但是您可以通过访问底层驱动程序的方法来使用这些操作

关于python - mongoengine bulk upsert 一批记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33388403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com