使用 CouchDB 批量取消删除 CouchDB 文档-Python
Bulk Undelete CouchDB Docs with CouchDB-Python
我不小心删除了 CouchDB 数据库中的所有文档,我想取消删除它们。
CouchDB 版本 = 2.2.0
Python = 2.7,我正在使用 python-couchDB 库。
我的 CouchDB 没有进行任何压缩,当我调用 /couchip:5984/my_db
时,doc_del_count 中列出了 1260 个文档
我按照这里的指示操作:
Retrieve just deleted document
并在 Python 中调整它,如下所示:
docs_to_put_back = []
ids_to_put_back = []
for id in db.changes()['results']:
ids_to_put_back.append(id)
for id in ids_to_put_back:
rev = db.get(id, revs=True, open_revs='all')
current_revision = rev[0]['ok']['_rev']
current_number = rev[0]['ok']['_revisions']['start']
rev_id = rev[0]['ok']['_revisons']['ids'][1] # The last revision id
old_doc = db.get(id, rev=str(current_number-1)+'-'+rev_id)
我从这里开始打印 old_doc,大多数时候,它 return 编辑了一个 NoneType,但我确实看到有些正在打印我想要恢复的文档,所以我添加了这个到代码:
if old_doc != None:
db.save(old_doc, rev=current_revision)
这没有用,没有任何东西恢复到我的数据库中。现在,当我尝试查看这些文档的所有修订时,当我调用 old_doc 时,我似乎无法 return 除了 NoneType 之外的任何东西。我试过像这样遍历所有修订:
for id in ids_to_put_back:
rev = db.get(_id, revs=True, open_revs='all')
current_revision = rev[0]['ok']['_rev']
current_number = rev[0]['ok']['_revisions']['start']
rev_list = rev[0]['ok']['_revisions']['ids']
counter = 1
for revision in rev_list[1:]:
old_doc = db.get(_id, rev=str(current_number-counter)+'-'+revision)
if old_doc == None:
counter += 1
continue
elif old_doc != None:
docs_to_put_back.append(old_doc)
break
else:
pass
docs_to_put_back 是 return 一个空列表。根据我的理解,如果我的数据库没有压缩,如果我有旧的修订号,我应该能够得到旧的文档。但是,从我一直在阅读的内容来看,情况似乎并非如此。
我也尝试过先将文档放回数据库,然后尝试使用 curl 获取旧修订号,如下所示:
curl -X PUT http://localhost:5984/db/id
{"ok": true, "id":"id", "rev":""3-b7ff1b0135c051822dd2958aec1a1b9c"}
curl -X GET http://localhost:5984/db/id?rev=2-1301c6dd3257decf978655f553ae8fa4
{"_id":"id", "rev":"2-1301c6dd3257decf978655f553ae8fa4", "_deleted":true}
curl -X GET http://localhost:5984/db/id?rev=1-42283a6b30639b12adddb814ba9ee4dc
{"error":"not_found", "reason":"missing"}
我中毒了吗? CouchDB 是否无法访问所有旧修订版(我读到的是一种用词不当)?
这不是我最好的一天,所以如果你能帮忙,那就太棒了!谢谢!
原来我被洗脑了,所以不,如果你等得太久,你就无法找回那些已删除的文件。默认情况下,CouchDB 将每小时检查一次数据库,如果超过 131 kb,则 运行 压缩。在那之后,我所有的旧修订都是 "missing."
要是 CouchDB 有一个用于用户错误的撤消按钮就好了....
我不小心删除了 CouchDB 数据库中的所有文档,我想取消删除它们。
CouchDB 版本 = 2.2.0 Python = 2.7,我正在使用 python-couchDB 库。
我的 CouchDB 没有进行任何压缩,当我调用 /couchip:5984/my_db
时,doc_del_count 中列出了 1260 个文档我按照这里的指示操作: Retrieve just deleted document
并在 Python 中调整它,如下所示:
docs_to_put_back = []
ids_to_put_back = []
for id in db.changes()['results']:
ids_to_put_back.append(id)
for id in ids_to_put_back:
rev = db.get(id, revs=True, open_revs='all')
current_revision = rev[0]['ok']['_rev']
current_number = rev[0]['ok']['_revisions']['start']
rev_id = rev[0]['ok']['_revisons']['ids'][1] # The last revision id
old_doc = db.get(id, rev=str(current_number-1)+'-'+rev_id)
我从这里开始打印 old_doc,大多数时候,它 return 编辑了一个 NoneType,但我确实看到有些正在打印我想要恢复的文档,所以我添加了这个到代码:
if old_doc != None:
db.save(old_doc, rev=current_revision)
这没有用,没有任何东西恢复到我的数据库中。现在,当我尝试查看这些文档的所有修订时,当我调用 old_doc 时,我似乎无法 return 除了 NoneType 之外的任何东西。我试过像这样遍历所有修订:
for id in ids_to_put_back:
rev = db.get(_id, revs=True, open_revs='all')
current_revision = rev[0]['ok']['_rev']
current_number = rev[0]['ok']['_revisions']['start']
rev_list = rev[0]['ok']['_revisions']['ids']
counter = 1
for revision in rev_list[1:]:
old_doc = db.get(_id, rev=str(current_number-counter)+'-'+revision)
if old_doc == None:
counter += 1
continue
elif old_doc != None:
docs_to_put_back.append(old_doc)
break
else:
pass
docs_to_put_back 是 return 一个空列表。根据我的理解,如果我的数据库没有压缩,如果我有旧的修订号,我应该能够得到旧的文档。但是,从我一直在阅读的内容来看,情况似乎并非如此。
我也尝试过先将文档放回数据库,然后尝试使用 curl 获取旧修订号,如下所示:
curl -X PUT http://localhost:5984/db/id
{"ok": true, "id":"id", "rev":""3-b7ff1b0135c051822dd2958aec1a1b9c"}
curl -X GET http://localhost:5984/db/id?rev=2-1301c6dd3257decf978655f553ae8fa4
{"_id":"id", "rev":"2-1301c6dd3257decf978655f553ae8fa4", "_deleted":true}
curl -X GET http://localhost:5984/db/id?rev=1-42283a6b30639b12adddb814ba9ee4dc
{"error":"not_found", "reason":"missing"}
我中毒了吗? CouchDB 是否无法访问所有旧修订版(我读到的是一种用词不当)?
这不是我最好的一天,所以如果你能帮忙,那就太棒了!谢谢!
原来我被洗脑了,所以不,如果你等得太久,你就无法找回那些已删除的文件。默认情况下,CouchDB 将每小时检查一次数据库,如果超过 131 kb,则 运行 压缩。在那之后,我所有的旧修订都是 "missing."
要是 CouchDB 有一个用于用户错误的撤消按钮就好了....