2012-05-01 58 views
22

我想刪除foo等於x的所有文檔。看起來像一個非常基本的操作,但我無法弄清楚。如何刪除CouchDB中的多個文檔?

我知道如何刪除單個文檔,但這還不夠好 - 我可能不得不每次刪除幾千個文檔。

如何批量刪除CouchDB中的文檔?

回答

9

我不知道這是否正確,但可以提供一個視圖,顯示foo字段,查詢您要刪除的所有文檔的視圖,並對所有文檔進行批量更新。所以兩個(理想)呼叫沙發。

http://comments.gmane.org/gmane.comp.db.couchdb.user/11222

也有類似的方式去做。

請在所有要按照Bulk deletion of documents

+5

OK,所以根據你的鏈接,我已經在此期間讀一些其他物品,似乎是在做一個單步批量刪除(或更新)是不可能的。自稱爲「數據庫」的東西似乎沒有這個特性,但至少現在我知道以最低效率的方式獲得我想要的東西,這似乎很讓人震驚。感謝您的信息。 –

+11

這是真的。 「數據庫」的定義正在發生變化。人們過去稱memcache爲「緩存」,現在它被認爲是「內存數據庫」。我同意這令人不安。但另一方面,舊的定義確實意味着「SQL數據庫」也是不正確的。 – JasonSmith

+0

真的很傷心有沒有更方便的方法......'( –

2

我還需要一些東西來處理,而且由於沒有什麼當時例如刪除和更新doc._deleted=true文件批量更新,我決定把我的自己實施。

你可以找到它here.

更新

由於這是對我很有幫助,爲了保護自己的錯誤,我添加了備份/恢復功能,該工具現在可以上找到版本0.2

+0

非常有用,非常感謝這個工具 – JoCuTo

0

我嘗試了一個有點長的方法來刪除文件。我首先創建了一個名爲map_fun的視圖,該視圖調用了我想要刪除的文檔。然後,我通過視圖迭代和存儲ALLT他文件的密鑰和用於德爾DB [「_身份證」]刪除這些

map_fun = '''function(doc){ 
    if (doc.doc_type == 'classic'){ 
    emit(doc._id, doc) 
    }}''' 

deldoclist = [] 
for row in db.query(map_fun): 
    deldoclist.append(row.key) 

for item in deldoclist: 
    del db[item] 
0

這是一個與批量刪除很簡單:https://wiki.apache.org/couchdb/HTTP_Bulk_Document_API 張貼至_all_docs JSONs列表看起來像:

{"_id": "0", "_rev": "1-62657917", "_deleted": true} 
+0

不,這個問題沒有回答我想要的東西就像'DELETE FROM t WHERE foo = 10'。使用批量操作,我會仍然必須打兩個電話,而不是一個。 –