Подтвердить что ты не робот

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

Я удалил документ, но я все еще вижу его в _changes, поэтому я могу увидеть последний допустимый _rev, который удаляется, поэтому возвращает doc с идентификатором и последней версией:

{
  "_id":"25efa4ec8489d8b89b34c5cad6000059",
  "_rev":"3-a982bd6dccce8f405433f8453ab86880",
  "_deleted":true
}

и никаких других атрибутов.

Как я могу восстановиться в этой ситуации? Предыдущую ревизию нельзя увидеть в _changes. Будет ли писать пустой документ (установка _deleted в false), чтобы просмотреть все сведения о версиях?

4b9b3361

Ответ 1

Хорошо, понял, если кому интересно:

  • получить удаленную историю, например:

    curl http://example.iriscouch.com/test/_changes
    
  • вы увидите удаленные документы с $id и $rev, поместите пустой документ в новую версию, например:

    curl -X PUT http://example.iriscouch.com/test/$id?rev=$rev -H "Content-Type: application/json" -d {}
    
  • теперь вы можете получить всю информацию о версиях, например:

    curl http://example.iriscouch.com/test/$id?revs_info=true
    
  • получить версию перед удалением, например:

    curl http://example.iriscouch.com/test/$id?rev=$prev_rev
    
  • верните его в couchdb, например:

    curl -X PUT http://example.iriscouch.com/test/$id?rev=$rev -H \'Content-Type: application/json\' -d \'$data\'
    

Сообщите мне, если у вас есть лучший способ, или script.

Ответ 2

Просто восстановление удаленных данных с couchdb. Вот как я решил это после небольшой помощи от добрых людей на couchdb irc.

1) Получить запрос $db/$id?revs=true&open_revs=all, где $db - ваше имя базы данных, а $id - это идентификатор документа, который вы удалили.

2) Очистите ответ. Результат этого запроса недействителен json, как ни странно, и требует очистки. Для меня работали следующие:

var deletedDoc = JSON.parse(xhReq.responseText.substring(xhReq.responseText.indexOf("{"), xhReq.responseText.lastIndexOf("}") + 1));

Результирующий объект выглядит следующим образом:

  {
       "_id":"37b580b03b903da2b50f88587d89c15d",
       "_rev":"2-bf3a2888dfe1ce0facef18720dcf97e2",
       "_deleted":true,
       "_revisions":{
              "start":2,
              "ids":["bf3a2888dfe1ce0facef18720dcf97e2","85f141069731f6bc77c910b0341e599f"]
             }
     }

3) Теперь мы можем построить последний номер версии, тот, который был удален до его удаления. Вытяните второй указатель в массиве _revisions.ids и добавьте его с _revisions.start-1 и символом "-". Это дает вам идентификатор документа документа перед его удалением.

var preDeleteRevisionNumber = (deletedDoc._revisions.start - 1) + "-"+ deletedDoc._revisions.ids[1];

4) Теперь соберите исходные данные (данные перед собой) с помощью команды get to $db/$id?rev=$preDeleteRevisionNumber

5) Чтобы перезаписать старую удаленную запись, вы должны отправить или вернуть документ с правильным идентификатором и последним номером ревизии (а не номером ревизии предварительного удаления, а номером ревизии, который теперь у него был удален).

Надеюсь, это поможет кому-то.