我正在将文档放入couchdb,如下所示:
curl -X PUT http://localhost:5984/bucket/keyname_1 \
-d '{"foo":"bar"}'
只要文档尚不存在,这就可以正常工作。如果确实存在,我需要包含一个“_rev”键来验证我是否正在更新现有文档:
curl -X PUT http://localhost:5984/bucket/keyname_1 \
-d '{"_rev":"2-207df9da","foo":"bar"}'
如果缺少_rev键,或者_rev键与现有记录中的匹配不匹配,则会引发“冲突”错误。这就是你如何知道修订版本不会被丢弃的。
但是如果我想无条件地写它并绕过这个检查怎么办?
我有一个设计,我正在更新主记录,检查,然后我想保存一个简短的摘要记录,只有几个字段,可以轻松抓取和下载的摘要屏幕。由于我只是更新了主记录,我知道我有最新的副本。我只是想做一个写,我不想为了得到_rev而先做一个读。这将是多余的。
有什么方法可以修改我的请求,告诉couchbase跳过_rev检查,然后无条件地放入文件?
答案 0 :(得分:2)
因此,您有两个要更新的文档:main和summary。即使你有最新版本的main,这实际上是否意味着你有最新版本的摘要,或者你只想强迫最后一个无论什么?如果,那么您可以查看更新处理程序:http://wiki.apache.org/couchdb/Document_Update_Handlers
此外,如果您使用某种辅助GET
来获取最新的_rev
,请使用更便宜的HEAD
请求。
编辑:顺便说一下,为什么有两个单独的文件? Summary
完全使用Main
一个完整吗?所有成员都在那里找到了吗?那你可以使用Show或list函数吗? http://wiki.apache.org/couchdb/Formatting_with_Show_and_List
答案 1 :(得分:0)
为什么不发布新的记录呢?
而不是PUTT记录这样,您可以保留所有此类日志事件的完整记录,但您不必处理文档冲突。