2011-05-10 56 views
7

我想了解CouchDB如何計算文檔的版本ID。我從它是由該位的代碼在這裏計算的來源注意:CouchDB如何計算版本號

couch_util:md5(term_to_binary([Deleted, OldStart, OldRev, Body, Atts2])) 

而且我知道,如果我創建一個新的空文檔沒有附件,CouchDB的總是給它的1-967a00dff5e02add41819138abb3284d修訂其中,在十進制是< < 150,122,0,223,245,224,42,221,65,129,145,56,171,179,40,77 >>。

但是,如果我鍵入以下到二郎提示(假已刪除,0 OldStart,0 OLDREV,一個空的身體,不包含附件):

erlang:md5(term_to_binary([false, 0, 0, [], []])).     

我總是

<<26,196,244,40,211,149,193,185,214,6,230,61,54,138,62,132>> 

回。

那麼我在做什麼錯在這裏 - 我怎樣才能找出沙發產生的實際版本?

+1

爲什麼你需要搶先確定_rev多少?任何寫入之後,您都會在服務器的響應中獲取生成的數字。 – 2011-05-10 19:00:51

+3

這是因爲我有興趣使用不同的數據存儲與couchdb同步,爲了正確同步,雙方都應以相同的方式計算修訂ID。 – kybernetikos 2011-05-10 21:37:59

回答

6

在閱讀Emit Tuples From Erlang Views In CouchDB的答案後,我意識到我在做什麼錯了沒有將空的物體列表包裝在一個元組中。我不確定沙發爲什麼這樣做,但這就是問題所在。

erlang:md5(term_to_binary([false, 0, 0, {[]}, []])). 

給出了正確的答案

< < 150,122,0,223,245,224,42,221,65,129,145,56,171,179,40,77 >>

+1

包含列表的1元組幾乎總是表示JSON類型(鍵/值)數據結構,或者剛剛進入或即將進入JSON序列化程序。 '{[{>,<<"this">>},{<<"cool">>,true}]}''會像':「這個」,「cool」:true}'。沒有1元組,它看起來就像任何其他的Erlang列表(或字符串)。 – JasonSmith 2011-05-11 14:19:33