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