web-dev-qa-db-ja.com

削除したばかりのドキュメントを取得する

ドキュメントを削除しましたが、_changesに表示されているので、削除された最後の有効な_revを確認できます。したがって、idと最後のリビジョンのドキュメントを取得すると次のようになります。

{
  "_id":"25efa4ec8489d8b89b34c5cad6000059",
  "_rev":"3-a982bd6dccce8f405433f8453ab86880",
  "_deleted":true
}

その他の属性はありません。

この状況でどのように回復できますか?以前のリビジョンは_changesに表示されません。空のドキュメントを書き込む(_deletedfalseに設定する)と、すべてのリビジョン情報を確認できますか?

26
avalez

興味のある人がいれば、わかりました。

  1. 削除された履歴を取得します。例:

    curl http://example.iriscouch.com/test/_changes
    
  2. $id$revが付いた削除済みドキュメントが表示されます。空のドキュメントを新しいバージョンとして配置します。例:

    curl -X PUT http://example.iriscouch.com/test/$id?rev=$rev -H "Content-Type: application/json" -d {}
    
  3. これで、すべてのリビジョン情報を取得できます。例:

    curl http://example.iriscouch.com/test/$id?revs_info=true
    
  4. 削除する前にバージョンを取得します。例:

    curl http://example.iriscouch.com/test/$id?rev=$prev_rev
    
  5. それをcouchdbに戻します。例:

    curl -X PUT http://example.iriscouch.com/test/$id?rev=$rev -H \'Content-Type: application/json\' -d \'$data\'
    

もっと良い方法やスクリプトがあれば教えてください。

46
avalez

Couchdbから削除されたデータを復元しています。これは、couchdvircの善良な人々からの少しの助けの後に私がそれを解決した方法です。

1)_$db/$id?revs=true&open_revs=all_へのgetリクエスト。_$db_はデータベース名、_$id_は削除したドキュメントのIDです。

2)応答をクリーンアップします。このリクエストの結果は、奇妙なことに有効なjsonではなく、クリーニングが必要でした。以下は私のために働いた:

var deleteDoc = 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配列の2番目のGUIDを引き出し、_revisions.start-1と「-」文字を追加します。これにより、削除される直前のドキュメントのリビジョンIDがわかります。

_var preDeleteRevisionNumber = (deletedDoc._revisions.start - 1) + "-"+ deletedDoc._revisions.ids[1];
_

4)_$db/$id?rev=$preDeleteRevisionNumber_にアクセスして、元の(削除前のデータ)を収集します

5)削除された古いエントリを上書きするには、正しいIDと最新のリビジョン番号(削除前のリビジョン番号ではなく、ドキュメントが削除されたリビジョン番号)でドキュメントを投稿または戻す必要があります。

これが誰かを助けることを願っています。

14
user2434799

CouchDBドキュメントの削除解除に関するブログ投稿

それについての記事があります。物事のより詳細な説明とよりジュニアフレンドリーなオリエンテーションのために誰かがそれが役に立つと思うかもしれないことを願っています。乾杯。

8
garmoncheg