【问题标题】:Can I retrieve all revisions of a deleted document?我可以检索已删除文档的所有修订吗?
【发布时间】:2016-06-24 08:00:09
【问题描述】:

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

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

【问题讨论】:

  • 删除后是否进行了数据库压缩?
  • Couch 的版本控制是为了满足它的需求,而不是我们的。旧版本不一定要复制,旧版本可能会在压缩过程中消失。
  • 这不是真的,文档的最后删除版本总是被保留以确保复制的一致性。压缩时仅删除旧版本。

标签: couchdb


【解决方案1】:

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

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

【讨论】:

  • 即使在压缩之后,您仍然会在 _changes 中看到已删除的文档。压缩只会删除非叶子文档主体,所有 [嗯,最多 revs_limit] 修订元数据都会被保留,即使在压缩之后也会保留文档的最终删除版本。
【解决方案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
}

注意必须是keyskey 不起作用,因为只有 keys 返回已删除文档的信息。

【讨论】:

  • 如果您有很多密钥,IIUC 可以将密钥列表发布到同一个 URL。
【解决方案3】:

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

我记得一些邮件列表讨论过让这更容易(因为对更改提要进行全面扫描显然不适合日常使用),但我不确定会发生什么。

【讨论】:

  • /_changes 仍然是唯一的方法。
【解决方案4】:

我最近已经打了好几次了,所以对于其他徘徊的人......

这个问题通常源于需要知道删除了哪个文档的编程模型。由于诸如“类型”之类的用户键在删除后无法幸免,并且 _id 最好由沙发分配,因此通常会很高兴在幕后达到顶峰并查看有关已删除文档的一些信息。另一种方法是有一个为文档设置deleted:True(无下划线)的过程,并调整任何侦听器过滤器等,以查找deleted:True。然后其中一个进程可以实际删除该文档。这意味着在文档上触发的任何进程都不需要跟踪 _id 以进行最终删除。

【讨论】:

  • 您可以通过保存带有 _deleted:true 的文档(以及您想要存储的任何其他字段)并让此类编程模型中的相关进程只监视 _changes 来完成类似的操作他们喜欢对删除进行任何清理。
猜你喜欢
  • 1970-01-01
  • 2016-09-14
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 2018-04-26
  • 2011-09-20
  • 1970-01-01
相关资源
最近更新 更多