2012-07-17 64 views
0

我想知道爲什麼couchdb.mapping.Document類的rev屬性是隻讀屬性。即使id屬性可以設置,我需要在我的項目中創建一個新的文檔與rev,我從CouchDB視圖獲得。我知道在CouchDB中生成了這個版本,但可惜創作者沒有預測到這種異常。此外,我認爲應該有一個帶有參數的Document類的get方法:ids - 它是許多文檔的標識符。couchdb-python:couchdb.mapping.Document類的rev屬性是隻讀的

@property 
def rev(self): 
    """The document revision. 

    :rtype: basestring 
    """ 
    if hasattr(self._data, 'rev'): # When data is client.Document 
     return self._data.rev 
    return self._data.get('_rev') 

回答

1

你說「我需要在我的項目來創建REV一個新的文檔」,但是這是否有可能在這條巨蟒lib或沒有,這是不可能的CouchDB中本身,以便允許您設置這在你的lib中對你的實際數據沒有影響。

CouchDB中的_rev由CouchDB嚴格管理以解決衝突,您不能從CouchDB將其設置爲的值進行更改。 (FWIW,CouchDB允許你設置你喜歡的任何(唯一的)_id,這就是爲什麼這是你的python lib中的可寫字段)。

+0

我想處理異常。當我設置_rev並想要更新文檔時,如果提供的文檔_rev與實際文檔不同,這意味着我想更新廢棄版本的文檔,因此會引發ResourceConflict異常,並且我可以處理它。在這種情況下,我不必事先檢查文檔的版本,我會更新文檔(但最終我改變了主意並知道不應該使用此內部CouchDB機制)。 – ady 2012-08-09 14:16:45

+0

好的,這可能是回答和被接受之間有史以來最長的時間:)謝謝。 – smathy 2015-01-14 20:08:15