web-dev-qa-db-ja.com

CouchDBで複数のドキュメントを削除するにはどうすればよいですか?

fooxに等しいすべてのドキュメントを削除したい。かなり基本的な操作のようですが、私には理解できません。

個々のドキュメントを削除する方法は知っていますが、それだけでは十分ではありません。一度に数千を削除する必要があるかもしれません。

CouchDBのドキュメントを一括削除するにはどうすればよいですか?

22
Mike Baranczak

それが正しい方法かどうかはわかりませんが、fooフィールドを公開するビューを作成し、ビューにdoc._ids削除するすべてのドキュメントを作成し、すべてのドキュメントを一括更新します。したがって、2回の(理想的には)ソファへの呼び出し。

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

それについて行くのと同じような方法があります。

削除して更新するすべてのドキュメントを一括更新しますdoc._deleted=trueドキュメントの一括削除 の例に従います。

10
lukecampbell

それを処理するための何かも必要でしたが、当時は何もなかったので、自分で実装することにしました。

あなたはそれを見つけることができます ここ。

更新

それは私にとって非常に役に立ち、間違いから身を守るために、このツールにバックアップ/復元機能を追加しました。これはバージョン0.2にあります。

2

一括削除を使用すると非常に簡単です: https://wiki.Apache.org/couchdb/HTTP_Bulk_Document_API Just POST to _all_docs to _all_docs次のようなJSONのリスト:

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

ドキュメントを削除するために少し長い方法を試しました。最初に、削除したいドキュメントを呼び出すmap_funというビューを作成しました。次に、ビューを繰り返し処理し、すべてのドキュメントのキーを保存し、del db ['_ id']を使用してそれらを削除しました。

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
galeej