CouchDB如何计算修订版号

kyb*_*kos 7 erlang couchdb

我试图了解CouchDB如何计算文档的修订版ID.我从源头注意到它是由这段代码计算的:

couch_util:md5(term_to_binary([Deleted, OldStart, OldRev, Body, Atts2]))
Run Code Online (Sandbox Code Playgroud)

我知道如果我创建一个没有附件的新空文档,CouchDB总是给它修改1-967a00dff5e02add41819138abb3284d,其中十进制为<< 150,122,0,223,245,224,42,221,65,129,145,56,171,179,40,77 >>.

但是,如果我在erlang提示符下键入以下内容(false表示已删除,0表示OldStart,0表示OldRev,空主体且没有附件):

erlang:md5(term_to_binary([false, 0, 0, [], []])).                   
Run Code Online (Sandbox Code Playgroud)

我总是得到

<<26,196,244,40,211,149,193,185,214,6,230,61,54,138,62,132>>
Run Code Online (Sandbox Code Playgroud)

背部.

那么我在这里做错了什么 - 如何计算沙发生成的实际修订?

kyb*_*kos 6

在阅读了Elang Tuples来自Erlang Views的答案在CouchDB中,我意识到我做错了的事情并没有将一个空的行列表包裹在一个元组中.我不确定为什么沙发会这样做,但那就是问题所在.

erlang:md5(term_to_binary([false, 0, 0, {[]}, []])).
Run Code Online (Sandbox Code Playgroud)

给出正确的答案

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

  • 包含列表的 1 元组几乎总是表示 JSON 类型(键/值)数据结构,或者刚出或即将进入 JSON 序列化程序。`{[{&lt;&lt;"like"&gt;&gt;, &lt;&lt;"this"&gt;&gt;}, {&lt;&lt;"cool"&gt;&gt;, true}]}` 将是 `{"like":"this", "cool" :真}`。如果没有 1 元组,它看起来就像任何其他 Erlang 列表(或字符串)。 (2认同)