我知道我可以检索“可用”文档的所有修订版,但是我可以检索已删除文档的最后一个“可用”版本吗?我不知道删除前的修订ID。这是我当前正在运行的命令...它返回{"error":"not_found","reason":"deleted"}
。
curl -X GET http://localhost:5984/test_database/a213ccad?revs_info=true
答案 0 :(得分:6)
我遇到了这个问题,尝试恢复已删除的文档,这是我的解决方案:
0)直到您运行压缩,获取已删除的历史记录,例如:
curl http://example.iriscouch.com/test/_changes
1)您将看到带有$ id和$ rev的已删除文档,将空文档作为新版本,例如:
curl -X PUT http://example.iriscouch.com/test/$id?rev=$rev -H "Content-Type: application/json" -d {}
2)现在您可以获得所有修订信息,例如:
curl http://example.iriscouch.com/test/$id?revs_info=true
答案 1 :(得分:2)
除_changes
之外,另一个好方法是将keys
与_all_docs
一起使用:
获取$MYDB/_all_docs?keys=["foo"]
- >
{
"offset": 0,
"rows": [
{
"id": "foo",
"key": "foo",
"value": {
"deleted": true,
"rev": "2-eec205a9d413992850a6e32678485900"
}
}
],
"total_rows": 0
}
请注意,它必须是keys
; key
无法使用,因为只有keys
会返回已删除文档的信息。
答案 2 :(得分:1)
您可以获取已删除文档的最新修订版,但首先必须先确定其修订版ID。为此,您可以查询_changes Feed并扫描文档的删除记录 - 这将包含最新修订,然后您可以使用docid?rev=N-XXXXX
获取它。
我记得有一些关于让这更容易的邮件列表的讨论(因为对变更提要进行全面扫描显然不适合日常使用),但我不确定是否有任何结果。
答案 3 :(得分:0)
我最近已经好好打了好几次,所以对于其他任何一个人来说......
此问题通常来自需要知道删除了哪个文档的编程模型。由于诸如“类型”之类的用户密钥不能在删除之后存在,并且_id最好由沙发分配,因此在封面下达到峰值并查看有关已删除文档的内容通常会很好。另一种方法是让一个进程设置已删除:文档的True(无下划线),以及调整任何侦听器过滤器等,以查找已删除的:True。然后,其中一个进程可以实际删除该文档。这意味着触发文档的任何进程都不需要跟踪_id以进行最终删除。