2

私はデータベースを持っていて、すべてのレコードを切り捨てたいと思っています。すべてのドキュメントに _deleted キーを追加するか、CouchDB-python ライブラリで db.delete() を呼び出すだけでよいことを知っています。私はdeletecouchdb-pythonを使用していますが、すべてのドキュメントをフェッチしてから、設計ドキュメントを除く各ドキュメントで.deleteを呼び出すと、機能しないようです。

これが私のコードです。

docs = get_db().view('_all_docs', include_docs=True)
for i in docs:
    if not(i['id'].startswith('_')):
        get_db().delete(i)

これがエラーです。からの結果が代わりに_all_docs返されるためです。id_id

File "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\site-packages\couchdb\client.py", line 625, in delete
if doc['_id'] is None:
KeyError: '_id'

_id私の質問は、 ?だけでなく、返されるすべてのドキュメントを取得するにはどうすればよいidですか? または、これを回避する方法はありますか?

4

2 に答える 2

1

クエリでは、ドキュメントのリストではなく、オブジェクトのリストが返されますcouchdb-python。それに属性を渡す必要があります。viewcouchdb.client.Rowdocdeleteget_db().delete(i['doc'])

ただし、パフォーマンスの観点からは、一括 APIを使用することをお勧めします。次のようにcouchdb-pythonなります。

rows = get_db().view('_all_docs', include_docs=True)
docs = []
for row in rows:
    if row['id'].startswith('_'):
        continue
    doc = row['doc']
    doc['_deleted'] = True
    docs.append(doc)
get_db().update(docs)
于 2017-10-25T14:25:51.990 に答える
0

2 つのステップで作成できる CouchDB からのドキュメントの削除:

  • ビューを作成します (削除するドキュメントをフィルタリングして)
  • ビューを使用して、ビューを使用してすべてのドキュメントを削除します

このためのツールを作成しました。

于 2017-10-23T07:39:09.160 に答える