在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的响应是{"错误":" not_found","原因" :"删除"}
这看起来像CouchDB中的一个错误,如果您能想到可能出现上述错误的任何情况以及任何可能的解决方法/解决方案,请告诉我们。
答案 0 :(得分:1)
Couchdb具有内置机制,可确保您不会覆盖与其他人相同的文档。
如果您输入任何现有文档,则必须在此过程中使用当前doc._rev
值,以便couchdb可以确认您要更新的文档是基于数据库中的最新版本。
我没有遇到删除这种情况,但是对我来说有意义的是,couchdb不应该允许你覆盖已删除的文档,因为假设应该是,你只是不知道删除。
如果您可以访问已删除文档的修订版,您是否已尝试过?如果是这样,是否可以通过将其添加到新文档中,您可以在第一次调用时成功使用PUT?