删除 CouchDB 中的所有文档
Deleting all documents in CouchDB
我有一个数据库,我想截断所有记录,我知道可以只向每个文档添加一个 _deleted 键或在 CouchDB-python 库上调用 db.delete()。我正在使用 couchdb-python 的 delete
,但是当我获取所有文档然后在除设计文档之外的每个文档上调用 .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'
我的问题是如何获取 returns _id
而不仅仅是 id
的所有文档?或者有什么办法解决这个问题?
从 CouchDB 中删除您可以分两步创建的文档:
- 创建视图(过滤要删除的文档)
- 使用视图删除所有使用视图的文档
我为此写了一个tool。
在 couchdb-python
中 view
查询 returns couchdb.client.Row
对象列表,而不是文档列表。您需要将属性 doc
传递给 delete
,即 get_db().delete(i['doc'])
.
然而,从性能角度来看,最好使用 bulk 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)
我有一个数据库,我想截断所有记录,我知道可以只向每个文档添加一个 _deleted 键或在 CouchDB-python 库上调用 db.delete()。我正在使用 couchdb-python 的 delete
,但是当我获取所有文档然后在除设计文档之外的每个文档上调用 .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'
我的问题是如何获取 returns _id
而不仅仅是 id
的所有文档?或者有什么办法解决这个问题?
从 CouchDB 中删除您可以分两步创建的文档:
- 创建视图(过滤要删除的文档)
- 使用视图删除所有使用视图的文档
我为此写了一个tool。
在 couchdb-python
中 view
查询 returns couchdb.client.Row
对象列表,而不是文档列表。您需要将属性 doc
传递给 delete
,即 get_db().delete(i['doc'])
.
然而,从性能角度来看,最好使用 bulk 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)