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
    
  • 把它放回couchdb,例如:

    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返回。