如何在CouchDB中编辑文档
couchdb(6), 怜悯(3)最重要的功能之一怜悯是为了支持模板的版本控制。以前曾使用过CouchDB,我想我可以利用文档API. 显然很多人都有这个想法,因为文件修订在wiki中输入一个相当直白的语句:
除了并发控制之外,不能将文档修订用于任何其他目的。
在进行版本控制解决方案的头脑风暴时,我遇到了此博客条目这给了我一些有用的建议,让我有了80%的成功:
创建具有版本属性的每个文档。
{“姓名”:“erlang\u gen\u服务器”,“版本”:1}
查看返回键,如
[“erlang\u gen\u服务器”,1]
.每次更新模板时,检索最新版本
?startkey=[“erlang\u gen\u server”,“Z”]&endkey=[“erlang\u gen\u server”,0]&decenting=true&count=1
增加its
版本
,然后为新版本创建一个新的CouchDB文档,其中键是[“erlang\u gen\u服务器”,N+1]
.使用获取所有版本
?startkey=[“erlang\u gen\u server”]&endkey=[“erlang\u gen\u server”,“Z”]
使用检索特定版本
?key=[“erlang\u gen\u server”,2]
有了这些,我——正如我已经提到的——大概有80%的路要走,但我还有一个突出的问题要解决:香豆烯以及我对语言和标签我们将模板的每个版本视为一个独立的文档。这意味着搜索二郎会返回一打不同版本的erlang\u couchdb\u应用程序. 一般来说,这使得网站使用起来很痛苦。我的解决办法是保持最新的
所有文档中的属性:
{“姓名”:“erlang\u gen\u服务器”,“版本”:2,“最新”:是的}{“姓名”:“erlang\u gen\u服务器”,“版本”:1,“最新”:假}
随着每个模板的更新,我进入并设置以前的最新版本,以便最新=错误
,然后使用最新=真
. 在那里,我更新了标签、语言和CouchDB Lucene使用的语言的视图,以便只发出最新的文档:
乐趣(博士){如果(博士.最新的&&博士.语言){发出(博士.语言,博士);}}
尽管工作比预期的要多一些(而且每次修改模板时都需要更新两个文档,有些人可能会对此感到反感),但这使得两全其美成为可能,即在没有人关心的地方维护版本化的模板而不暴露版本。