使用curl将文档放入couchdb时如何跳过修订检查?

时间:2013-05-31 16:43:11

标签: couchdb

我正在将文档放入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检查,然后无条件地放入文件?

2 个答案:

答案 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记录

这样,您可以保留所有此类日志事件的完整记录,但您不必处理文档冲突。