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

Couchdb 我可以检索已删除文档的所有修订吗?,couchdb,Couchdb,我知道我可以检索“可用”文档的所有修订,但我可以检索已删除文档的最后一个“可用”版本吗?我不知道删除之前的修订id。这是我当前正在运行的命令…它返回{“error”:“not_found”,“reason”:“deleted”} curl-X GET我最近已经多次遇到这个问题,所以对于任何路过的人来说 这个问题通常源于需要知道删除了哪个文档的编程模型。由于像“type”这样的用户密钥不能被删除,而且_id最好是由coach分配的,所以最好是在封面下登峰造极,看看被删除的文档。另一种方法是让一个进

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


curl-X GET

我最近已经多次遇到这个问题,所以对于任何路过的人来说


这个问题通常源于需要知道删除了哪个文档的编程模型。由于像“type”这样的用户密钥不能被删除,而且_id最好是由coach分配的,所以最好是在封面下登峰造极,看看被删除的文档。另一种方法是让一个进程为文档设置deleted:True(无下划线),并调整任何侦听器过滤器等,以查找deleted:True。其中一个进程可以实际删除该文档。这意味着在文档上触发的任何进程都不需要跟踪最终删除的_id。

您可以获取已删除文档的最后版本,但首先必须确定其版本id。为此,您可以查询提要并扫描文档的删除记录-这将包含最新版本,然后您可以使用
docid?rev=N-XXXXX
获取它


我记得有一些邮件列表讨论过如何简化此操作(因为对更改提要进行完整扫描显然不适合常规使用),但我不确定是否有任何结果。

我遇到了这个问题,试图恢复已删除的文档,以下是我的解决方案:

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

另请参见

除了
\u更改
,另一个好方法是将
用于
\u所有文档

获取
$MYDB/\u所有文档?键=[“foo”]
->

{
    "offset": 0,
    "rows": [
        {
            "id": "foo",
            "key": "foo",
            "value": {
                "deleted": true,
                "rev": "2-eec205a9d413992850a6e32678485900"
            }
        }
    ],
    "total_rows": 0
}

请注意,它必须是
<代码>键不起作用,因为只有
返回已删除文档的信息。

删除后是否执行了数据库压缩?Coach的版本控制是为了满足其需要,而不是我们的需要。旧版本不一定要复制,而且旧版本可能会在压缩过程中消失。这不是真的,文档的最后一个删除版本始终保留,以确保复制的一致性。压缩时只删除较旧的修订。您可以通过使用_deleted:true(以及您希望存储在旁边的任何其他字段)保存文档来完成类似的操作在这样一个编程模型中,让依赖进程只需监视更改,就可以对删除进行任意清理。
/\u更改
仍然是唯一的方法。即使在压缩之后,您仍然可以在更改中看到已删除的文档。压缩只会删除非叶文档正文,所有[好吧,最高版本限制]修订元数据都会保留,即使在压缩后,文档的最终删除版本也会保留。如果您有很多键,IIUC您可以将键列表发布到同一URL。