我知道 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.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 -
upsert
和 new
。还要注意 $setOnInsert 运算符示例,它只会在 findAndModify 执行 upsert 时设置一个字段。关于django - MongoEngine:用 upsert/update_one 替换 get_or_create,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25846462/