在MongoEngine中进行原子更新之前获取一个字段

时间:2013-07-03 10:50:58

标签: python mongodb atomic mongoengine

假设如下所示的架构:

class DocA(Document):
    owner = ReferenceField(User)
    strings = ListField(StringField)

如果我想检查登录用户是否是所有者,然后将新字符串添加到stringlist,我当前必须访问数据库两次:

if self.has_perm(DocA.objects(id=someid).only('owner').first()):
    DocA.objects(id=someid).update_one(push__strings="New String")

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

鉴于perm只是检查所有者,您可以在一个查询中执行此操作:

DocA.objects(id=someid, user=logged_in_user).update_one(push__strings="New String")