2011-03-25 103 views
9

我知道我可以檢索「可用」文檔的所有修訂,但我可以找回已刪除的文件的最後一個「可用」的版本?我不知道刪除之前的版本ID。這是我目前正在運行的命令...它返回{"error":"not_found","reason":"deleted"}我可以檢索已刪除文檔的所有修訂版本嗎?

捲曲-X GET http://localhost:5984/test_database/a213ccad?revs_info=true

+0

先後後刪除了執行的數據庫壓縮? – bdargan 2011-04-01 10:03:02

+2

沙發的版本是爲了滿足它的需求,而不是我們的需求。舊版本不一定被複制,舊版本可能在壓縮過程中消失。 – 2011-05-13 18:33:42

+1

這不是事實,文檔的最後刪除版本始終保留以確保複製的一致性。壓縮僅刪除舊版本。 – smathy 2012-06-26 03:16:12

回答

0

我最近打了好幾次,所以任何人都徘徊由...

這個問題通常從需要知道哪些文件是一種編程模型結果刪除。由於'類型'之類的用戶鍵不存在刪除,而_id最好由沙發分配,因此通常會很高興在頂部下方看到關於刪除的文檔的內容。另一種方法是創建一個爲文檔設置已刪除的過程:True(無下劃線),並調整任何偵聽器過濾器等,以查找已刪除:True。其中一個進程可以實際刪除文檔。這意味着在文檔上觸發的任何進程都不需要跟蹤最終刪除的_id。

+0

你可以通過使用_deleted:true(以及其他任何你想存儲的字段)來保存文檔,並在這樣的編程模型中擁有依賴進程來監視_changes以做出任何他們喜歡的清理來響應刪除。 – natevw 2012-05-02 23:02:02

1

你可以刪除的文件的最後一次修改,但首先你必須首先確定其版本ID。要做到這一點,你可以查詢_changes飼料和掃描文件的刪除記錄 - 這將包含最後一次修改,然後你可以用它取docid?rev=N-XXXXX

我記得使這個容易(因爲這樣做的改變飼料的全掃描顯然是不理想的日常使用)的一些郵件列表討論,但我不知道有什麼後果。

+0

'/ _changes'仍然是唯一的方法。 – smathy 2012-06-26 03:18:25

6

我有這個問題,試圖恢復已刪除的文件,這裏是我的解決方案:

0),直到你運行一個壓實,被刪除的歷史,如:

curl http://example.iriscouch.com/test/_changes 

1)你會看到有$ ID和$ REV刪除的文件,把空文檔作爲新版本,如:

curl -X PUT http://example.iriscouch.com/test/$id?rev=$rev -H "Content-Type: application/json" -d {} 

2)現在你可以得到所有的修訂信息,例如:

curl http://example.iriscouch.com/test/$id?revs_info=true 

Retrieve just deleted document

+1

即使在壓縮後,您仍然會在_changes中看到已刪除的文檔。壓縮僅刪除非葉文檔體,即使在壓縮之後,所有[好,達到revs_limit]修訂版元數據也保留以及文檔的最終刪除版本。 – natevw 2013-02-13 20:45:41

1

見此外_changes,這樣做的另一個好方法是使用keys_all_docs

GET $MYDB/_all_docs?keys=["foo"] - >

{ 
    "offset": 0, 
    "rows": [ 
     { 
      "id": "foo", 
      "key": "foo", 
      "value": { 
       "deleted": true, 
       "rev": "2-eec205a9d413992850a6e32678485900" 
      } 
     } 
    ], 
    "total_rows": 0 
} 

注意,它有爲keys; key將不起作用,因爲只有keys會返回已刪除文檔的信息。

+0

如果您有很多密鑰,並且IIUC可以將密鑰列表發佈到相同的URL。 – joeforker 2014-08-22 20:20:55

相關問題