我不小心删除了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,它返回了NoneType,但是我确实看到有些正在打印要还原的文档,因此我将其添加到了代码中:

    if old_doc != None:
        db.save(old_doc, rev=current_revision)


这没有用,什么也没有恢复到我的数据库。现在,当我尝试查看这些文档的所有修订版时,在调用old_doc时,我似乎只返回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返回一个空列表。根据我的理解,如果我的数据库没有压缩,那么如果我有旧的修订号,我应该能够得到旧的文档。但是,从我一直在阅读的内容来看,似乎并非如此。

我也尝试过先将文档放回数据库,然后尝试使用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是否无法访问所有旧版本(我读过的版本不当)?

这不是我最好的一天,所以如果您能帮忙的话,那太好了!谢谢!

最佳答案

原来我很忙,所以如果您等待太久,您将无法找回那些已删除的文档。默认情况下,如果超过131 kb,CouchDB将每小时检查一次数据库并运行压缩。在那之后,我所有的旧版本都“丢失了”。

如果只有CouchDB具有针对用户错误的“撤消”按钮...。

关于python - 使用CouchDB-Python批量取消删除CouchDB文档,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52845571/

10-16 13:11