2016-09-14 63 views
0

我正在使用couchDB來存儲一些數據,並且在刪除在n天之前插入的文檔時遇到問題。在CouchDB中刪除過期的文檔

因此,我希望加載我想通過視圖刪除的文檔,並一次對它們全部執行DELETE請求;但失敗了。

樣本文檔:

{ 
"date":"20160912", 
"_id":"1xxxxx", 
"name":"namal" 
} 

View功能:

function (doc) { 
     if(doc.date){ 
      emit(doc.date,doc); 
     } 
    } 

URL加載文件:

http://localhost:5984/dbx/_design/viewx/_view/date?key=%2220160910%22

DELETE請求:

curl -X DELETE http://localhost:5984/dbx/_design/viewx/_view/date?key=%2220160910%22 

我知道我可以使用_id做到這一點,每個文檔和_rev像下面。

curl -X DELETE http://localhost:5984/dbx/1xxxxx?rev="1-1111x1111111x222222x333333" 

但是在這種情況下,我需要逐個刪除生成的文檔。我想要的是,一次刪除文檔列表(bluk文檔)(正如我所提到的,實際需要刪除在n天之前插入的文檔)。

此外,我知道更好的方法是通過使用CouchBase或MongoDb設置到期時間來清除過期數據。但我正在尋找CouchDB實現本身的解決方案。

注:在這種情況下,我想讓他們真的刪除。不可見。

  • 語言:Java的1.7
  • 操作系統:Ubuntu的14.04 64位
  • CouchDB的版本:1.6.1

回答

1

你可以使用CouchDB的批量文件API更新文件(更新,設置_deleted字段爲true與刪除一樣好)。

更多信息:http://wiki.apache.org/couchdb/HTTP_Bulk_Document_API#Modify_Multiple_Documents_With_a_Single_Request

對於一些更長久,你可以使用CouchDB的_purge命令。 Details here

請注意,此操作不會被複制。因此,如果您有複製設置,則必須在每個數據庫上執行此操作。

+0

謝謝你的回答。但它不會刪除文件?它使它看不見。那麼,作爲刪除怎麼樣呢?我想讓它實際上被刪除,正如我在問題中提到的那樣。 – namalfernandolk

+0

這是CouchDB行話中的'刪除'。您是否在尋找能夠刪除文檔的所有痕跡和歷史記錄的內容?你想要這樣的「永久刪除」來同步嗎? – Kul

+0

是的。我想永久刪除它們並釋放空間 – namalfernandolk