2012-03-11 39 views
0

我有一個集合在下面的代碼:更新文件 - mongoengine

class Author(Agent): 

    def foo(self): 
     self.find_another_document_and_update_it(ids) 
     self.processed = True 
     self.save() 

    def find_another_document_and_update_it(self, ids): 
     for id in ids: 
      documentA = Authors.objects(id=id) 
      documentA.update(inc__mentions=1) 

裏面find_another_document_and_update_it()我查詢數據庫和檢索文檔A.然後我遞增A.計數器然後在foo(),在調用find_another_document_and_update_it()之後,我還保存當前文檔讓我們說B.問題是雖然我看到A中的計數器實際上是在調用self.save()時增加的,但文檔A被重置爲其舊值。我想問題是如何處理併發問題以及MongoDB如何處理它。我感謝您的幫助。

回答

1

在MongoEngine 0.5中save只更新已更改的字段 - 在保存整個文檔之前,這意味着find_another_document_and_update_it中的上一次更新將被覆蓋。一般來說,與python的所有東西一樣,最好是明確的 - 所以你可能想用update來更新文檔。

您應該能夠更新所有提及一次更新:

Authors.objects(id__in=ids).update(inc__mentions=1) 

無論如何,更新將self.save()後致電全局更新的最佳途徑。這樣,提及只會在您處理並保存所有更改後纔會增加。