【问题标题】:Issue with CouchDBCouchDB 的问题
【发布时间】:2015-11-07 05:39:08
【问题描述】:

在 TAMA 实现中,我遇到了 Couchdb 的问题。 (1.2.0版),

我们使用命名文档来维护应用程序中的唯一约束逻辑。 (命名文档:其_id 是用户定义的,而不是沙发生成的。)

我们正在使用 REST API 将文档添加到 Couchdb,在那里我们发现了奇怪的行为:

当我们尝试使用 HTTP PUT 重新创建过去已删除的文档时(由于代码中的错误),文档不是第一次创建的。

HTTP Put - Returns HTTP 200, but doc is not saved in couchdb. 
Again trying the same request, 
HTTP Put - Returns HTTP 200 and adds the doc in database.

HTTP PUT 请求需要发送两次才能创建和保存文档。

我已检查上述错误对于已删除的文档是否可重现,即 GET _id 的响应为 {"error":"not_found","re​​ason":"deleted"}。

对我来说,这看起来像是 CouchDB 中的一个错误,如果您能想到可能发生上述错误的任何场景以及任何可能的解决方法/解决方案,请告诉我们?

【问题讨论】:

  • 您是否尝试过使用较新版本的 CouchDb?
  • 我也见过这个,看起来很奇怪。仅在压缩后发生。

标签: couchdb


【解决方案1】:

Couchdb 有一个内置机制来确保您不会像其他人一样覆盖同一个文档。

如果您 PUT 任何现有文档,则必须在此过程中附带当前的 doc._rev 值,以便 couchdb 可以确认您正在更新的文档是基于数据库中的最新版本。

我没有遇到过这种删除的情况,但对我来说,couchdb 不应该像假设那样允许您覆盖已删除的文档是有道理的,您只是不知道删除。

您是否尝试过是否可以访问已删除文档的修订版,如果可以,是否通过将其添加到新文档中,您是否可以在第一次调用时通过 PUT 成功?

【讨论】:

  • 谢谢,但我无法获得已删除文档的 _rev(很久以前删除)...有什么办法可以到达那里 _revs...
猜你喜欢
  • 1970-01-01
  • 2017-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 2017-06-17
相关资源
最近更新 更多