Могу ли я получить все версии удаленного документа? - PullRequest
9 голосов
/ 25 марта 2011

Я знаю, что могу получить все ревизии «доступного» документа, но могу ли я получить последнюю «доступную» версию удаленного документа?Я не знаю идентификатор ревизии до удаления.Это команда, которую я сейчас выполняю ... она возвращает {"error":"not_found","reason":"deleted"}.

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

Ответы [ 4 ]

6 голосов
/ 02 июня 2012

У меня есть эта проблема, при попытке восстановить удаленный документ, вот мое решение:

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

См. Также Получить только что удаленный документ

2 голосов
/ 21 апреля 2014

Помимо _changes, еще один хороший способ сделать это - использовать keys с _all_docs:

GET $MYDB/_all_docs?keys=["foo"] ->

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

Обратите внимание, что оно должно быть keys; key не будет работать, потому что только keys возвращает информацию для удаленных документов.

1 голос
/ 03 мая 2012

Вы можете получить последнюю ревизию удаленного документа, однако сначала вы должны сначала определить его ревизию.Для этого вы можете запросить фид _changes и отсканировать запись об удалении документа - она ​​будет содержать последнюю ревизию, а затем вы можете получить ее, используя docid?rev=N-XXXXX.

Я помню некоторыеобсуждение в почтовой рассылке, как сделать это проще (поскольку полное сканирование ленты изменений, очевидно, не идеально подходит для обычного использования), но я не уверен, что из этого что-то получилось.

0 голосов
/ 29 марта 2012

За последнее время я несколько раз ударил по этому, так что для всех, кто бродит мимо ...

Этот вопрос обычно возникает из модели программирования, которая должна знать, какой документ был удален. Поскольку пользовательские ключи, такие как 'type', не сохраняются при удалении, а _id лучше всего назначать couch, часто было бы неплохо заглянуть под покровы и увидеть что-то об удаленном документе. Альтернативой является создание процесса, который устанавливает удаленное: True (без подчеркивания) для документов, и настраивает любые фильтры прослушивателей и т. Д. Для поиска удаленных: True. Затем один из процессов может фактически удалить документ. Это означает, что любой процесс, запускающий документ, не должен отслеживать _id для возможного удаления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...