Только что восстановил удаленные данные с couchdb. Вот как я решил это после небольшой помощи от добрых людей на couchdb irc.
1) Получить запрос к $db/$id?revs=true&open_revs=all
, где $db
- имя вашей базы данных, а $id
- это идентификатор документа, который вы удалили.
2) Очистите отклик. Результат этого запроса недействителен json, как ни странно, и требует очистки. Следующие работал для меня:
вар 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) Теперь собирать исходный (PREDELETE данные) с добраться до $db/$id?rev=$preDeleteRevisionNumber
5) Для того, чтобы перезаписать старые удаленные записи, вы должны размещать или положить обратно документ с правильным идентификатором и последним номер ревизии (а не номер версии предварительного удаления, но номер версии, с которой документ теперь был удален).
Надеюсь, это поможет кому-то.
Исходя из этого вопроса, это должно быть возможно: http://stackoverflow.com/questions/4738522/couchdb-change-notifications – avalez