我可以检索已删除文档的所有修订版吗?

时间:2011-03-25 15:16:30

标签: couchdb

我知道我可以检索“可用”文档的所有修订版,但是我可以检索已删除文档的最后一个“可用”版本吗?我不知道删除前的修订ID。这是我当前正在运行的命令...它返回{"error":"not_found","reason":"deleted"}

curl -X GET http://localhost:5984/test_database/a213ccad?revs_info=true

4 个答案:

答案 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

另见Retrieve just deleted document

答案 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以进行最终删除。