4

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

4

2 回答 2

3

因此,您有两个要更新的文档:主要和摘要。即使您拥有最新版本的 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

于 2013-05-31T20:41:43.117 回答
0

与其 PUT 记录,不如 POST 一个新记录?

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

于 2013-05-31T18:46:34.030 回答