Couchdb 检索刚刚删除的文档
我删除了一个文档,但我仍然可以在Couchdb 检索刚刚删除的文档,couchdb,Couchdb,我删除了一个文档,但我仍然可以在\u changes中看到它,因此我可以看到上次有效的\u rev,该文档已被删除,因此获取id为的文档和上次修订仅返回: { "_id":"25efa4ec8489d8b89b34c5cad6000059", "_rev":"3-a982bd6dccce8f405433f8453ab86880", "_deleted":true } 没有其他属性 在这种情况下我怎样才能恢复?在中看不到以前的版本\u更改。写入空文档(将\u deleted设置为fa
\u changes
中看到它,因此我可以看到上次有效的\u rev
,该文档已被删除,因此获取id为的文档和上次修订仅返回:
{
"_id":"25efa4ec8489d8b89b34c5cad6000059",
"_rev":"3-a982bd6dccce8f405433f8453ab86880",
"_deleted":true
}
没有其他属性
在这种情况下我怎样才能恢复?在
中看不到以前的版本\u更改
。写入空文档(将\u deleted
设置为false
)是否有助于查看所有修订信息?好的,如果有人感兴趣,请解决它:
curl http://example.iriscouch.com/test/_changes
$id
和$rev
的已删除文档,将空文档作为新版本,例如:
curl -X PUT http://example.iriscouch.com/test/$id?rev=$rev -H "Content-Type: application/json" -d {}
curl http://example.iriscouch.com/test/$id?rev=$prev_rev
curl http://example.iriscouch.com/test/$id?revs_info=true
curl -X PUT http://example.iriscouch.com/test/$id?rev=$rev -H "Content-Type: application/json" -d {}
curl http://example.iriscouch.com/test/$id?rev=$prev_rev
curl -X PUT http://example.iriscouch.com/test/$id?rev=$rev -H \'Content-Type: application/json\' -d \'$data\'
如果您有更好的方法或脚本,请告诉我。刚刚从couchdb恢复删除的数据。这就是在couchdb irc上的好人帮了我一点小忙后,我是如何解决这个问题的 1) 对
$db/$id?revs=true&open\u revs=all
的get请求,其中$db
是您的数据库名称,$id
是您删除的文档的id
2) 清除响应。奇怪的是,这个请求的结果不是有效的json,需要清理。以下几点对我很有用:
var deletedDoc=JSON.parse(xhReq.responseText.substring(xhReq.responseText.indexOf(“{”),xhReq.responseText.lastIndexOf(“}”)+1)代码>
生成的对象如下所示:
{
"_id":"37b580b03b903da2b50f88587d89c15d",
"_rev":"2-bf3a2888dfe1ce0facef18720dcf97e2",
"_deleted":true,
"_revisions":{
"start":2,
"ids":["bf3a2888dfe1ce0facef18720dcf97e2","85f141069731f6bc77c910b0341e599f"]
}
}
3) 现在我们可以构建最后一个修订号,即删除之前的修订号。拉出_revisions.ids数组中的第二个guid,并用_revisions.start-1和“-”字符将其追加。这将为您提供文档删除前的版本id
var preDeleteRevisionNumber = (deletedDoc._revisions.start - 1) + "-"+ deletedDoc._revisions.ids[1];
4) 现在使用get to$db/$id?rev=$predeleteVisionNumber
5) 要覆盖旧的已删除条目,您必须发布或放回具有正确id和最新修订号的文档(不是删除前的修订号,而是文档现在已删除的修订号)
希望这对别人有帮助 我找到了一种恢复已删除文档的简单方法,只需将先前(未删除的)修订版复制到“自身”即可。它与附件也能完美配合
找到文档的id和版本后(正如avalez解释的那样:)
不必检索数据并将其放回,只需使用$id作为目标的操作副本:
COPY http://example.iriscouch.com/test/$id?rev=$rev HTTP/1.1
Accept: application/json
Destination: $id
或与卷曲:
curl -X COPY "http://example.iriscouch.com/test/$id?rev=$rev" -H "Destination: $id"
基于这个问题,它应该是可能的:你知道为什么在第2步我得到-{“错误”=>“冲突”,“原因”=>“文档更新冲突”}?这非常有用-感谢你提供了清晰、分步的说明。大部分操作都可以通过Futon完成,但有几个步骤确实需要通过CLI运行。不幸的是,这并没有广泛的文档记录。不适用于我,它说的是{“error”:“not_found”,“reason”:“missing”}
,如何获取我获得的所有修订数据{“error”:“forbidden”,“reason”:“用户名无法更改”。}
:(这是一个很好的快捷方式:详细信息请参见我的答案我知道这是一个非常古老的线程,但是如果您要求,您可以获得有效的JSON。例如,使用curl:curl-H'Accept:application/JSON''http://127.0.0.1:5984/$db/$id?revs=true&open_revs=all
。五岁了,但仍然是最好的答案。请注意,如果您使用的是PockDB,则se作为JSON返回。