由于409冲突,无法删除Cloudant / couchdb文档

时间:2015-04-15 12:48:27

标签: couchdb cloudant ibm-cloud

我有一个在IBM Bluemix中运行的Java应用程序,它使用Cloudant(couchdb)数据库作为服务。我在该数据库中有一个无法删除的文档,因为当我尝试时,Cloudant会返回409冲突错误。但是,当我查询它是否存在冲突时,它不报告任何:

$ curl 'https://<user>-bluemix:<pass>@<host>-bluemix.cloudant.com/<dbname>/e4eca7af-cb27-4b1e-b738-31abcf880680?conflicts=true' 
{
"_id": "e4eca7af-cb27-4b1e-b738-31abcf880680", 
"_rev": "13887-a24ecaf2f6e628903e294b11e73d8ca8", 
...[other stuff but no _conflicts section]
}

当我尝试删除它时:

$ curl -i -X DELETE 'https://<user>-bluemix:<pass>@<host>-bluemix.cloudant.com/<dbname>/e4eca7af-cb27-4b1e-b738-31abcf880680?_rev=13887-a24ecaf2f6e628903e294b11e73d8ca8'
HTTP/1.1 409 Conflict
X-Couch-Request-ID: 02286a98ac
Server: CouchDB/1.0.2 (Erlang OTP/R14B)
Date: Wed, 15 Apr 2015 12:35:00 GMT
Content-Type: text/plain;charset=utf-8
Content-Length: 58
Cache-Control: must-revalidate
Strict-Transport-Security: max-age=31536000
X-Content-Type-Options: nosniff;

{"error":"conflict","reason":"Document update conflict."}

这是一个已被删除并重新创建多次的文档(这就是_rev计数如此之高)。通常它工作正常,但它偶尔会进入这种冲突状态。我发现我可以通过Cloudant Web界面删除它,但似乎不是通过REST界面。但是一旦我删除它,它可以正常工作一段时间然后问题又回来了。

那么为什么当我尝试删除时会发生冲突,但它不会告诉我与'conflicts = true'参数的冲突是什么?我也试过'_deleted_conflicts = true',这也没有显示任何内容。

它是如何进入这种状态的,如何防止它在将来发生?

3 个答案:

答案 0 :(得分:4)

您需要说?rev=,而不是?_rev=才能正确传递修订。

http://docs.couchdb.org/en/1.6.1/api/document/common.html#delete--db-docid

答案 1 :(得分:2)

在Cloudant中删除文档时,必须提供修订标记作为“rev”参数。您正在传递“_rev”参数。您看到的错误就好像您根本没有通过修订版。

https://docs.cloudant.com/api.html#delete36

答案 2 :(得分:1)

与我们的云端支持人员交谈,实际上rev=而不是_rev=