2013-07-03 35 views
0

原子更新之前,假設一個架構如下圖所示:獲得一個場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") 

有沒有更好的方法來做到這一點?

+0

可以'self.has_perm'在查詢中定義的?看起來像它的3個查詢。 1)獲取DocA,2)獲取用戶3)更新 – Ross

+0

'self.has_perm'根本不查詢數據庫。它只是檢查object_passed_to_it.owner.username是否等於登錄用戶。 – polandeer

回答

1

給予了燙髮只是檢查所有者,您可以在單個查詢做到這一點:

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

在上面的查詢中,logged_in_user必須是Document實例,而不是用戶名。但是,user__username似乎不起作用。 – polandeer