foo
がxに等しいすべてのドキュメントを削除したい。かなり基本的な操作のようですが、私には理解できません。
個々のドキュメントを削除する方法は知っていますが、それだけでは十分ではありません。一度に数千を削除する必要があるかもしれません。
CouchDBのドキュメントを一括削除するにはどうすればよいですか?
それが正しい方法かどうかはわかりませんが、foo
フィールドを公開するビューを作成し、ビューにdoc._id
s削除するすべてのドキュメントを作成し、すべてのドキュメントを一括更新します。したがって、2回の(理想的には)ソファへの呼び出し。
http://comments.gmane.org/gmane.comp.db.couchdb.user/11222
それについて行くのと同じような方法があります。
削除して更新するすべてのドキュメントを一括更新しますdoc._deleted=true
ドキュメントの一括削除 の例に従います。
それを処理するための何かも必要でしたが、当時は何もなかったので、自分で実装することにしました。
あなたはそれを見つけることができます ここ。
それは私にとって非常に役に立ち、間違いから身を守るために、このツールにバックアップ/復元機能を追加しました。これはバージョン0.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}
ドキュメントを削除するために少し長い方法を試しました。最初に、削除したいドキュメントを呼び出す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]