gpt4 book ai didi

django - MongoEngine:用 upsert/update_one 替换 get_or_create

转载 作者:行者123 更新时间:2023-12-02 06:00:43 25 4
gpt4 key购买 nike

我明白 get_or_create现在不推荐使用 upsert ,但我该如何制作 update_one返回对象而不是修改的对象数量,如果我不想更新任何东西,我可以只检索一个对象吗?

例如

Model.objects.get_or_create(first_name='John', last_name='Potter', age=40)
# assuming that first_name + last_name + age are enough to uniquiely indentify a person

返回一个 Model 对象(如果不存在则返回一个新对象,如果存在则返回现有对象)。使用新方法与此等效的是什么?
Model.objects(first_name='John', last_name='Potter', age=40).update_one(upsert=True)
# returns number of objects (1)
Model.objects(first_name='John', last_name='Potter', age=40).update_one(set__first_name='John', set__last_name='Potter', set__age=40,upsert=True)
# returns number of objects (1)

有没有办法让它返回对象,并使它的行为与 get_or_create 完全一样?

我在 documentation 中找不到如何执行此操作

最佳答案

您非常接近,但您需要通过 modify 使用 findAndModify 命令而不是更新命令。

NewDoc = Model.objects(first_name='John', 
last_name='Potter',
age=40).modify(upsert=True, new=True,
set__first_name='John,
set__last_name='Potter',
set__age=40,
set_on_insert__newUser=True)

注意前 2 个修改 kwargs - upsertnew .还要注意 $setOnInsert运算符示例,如果 findAndModify 执行 upsert,它只会设置一个字段。

关于django - MongoEngine:用 upsert/update_one 替换 get_or_create,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25846462/

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