我知道 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 - upsertnew 。还要注意 $setOnInsert 运算符示例,它只会在 findAndModify 执行 upsert 时设置一个字段。

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

10-15 01:09