Ответ на второй вопрос: ДА.
Измененные данные всегда добавляются в дерево с большим номером ревизии.одна и та же версия никогда не изменяется.
Для вашей информации:
Ревизия (1-abcdef) построена таким образом: 1 = номер версии (здесь: первая версия), вторая - хешповерх содержимого документа (не уверен, если там есть еще немного «соли») ... так что одно и то же содержимое документа всегда будет производить один и тот же номер ревизии (с той же настройкой couchdb) даже на других машинах, когда включенотот же изменяющийся уровень (1-, 2-, 3-)
Другой способ - : если вам нужно сохранить старые версии, вы можете хранить документы в большем документе:
{
id:"docHistoryContainer_5374",
"doc_id":"5374",
"versions":[
{"v":1,
"date":[2012,03,15],
"doc":{ .... doc_content v1....}
},
{"v":2,
"date":[2012,03,16],
"doc":{ .... doc_content v2....}
}
]
}
тогда вы можете запросить ревизии:
Просмотр "byRev":
for (var curRev in doc.versions) {
map([doc.doc_id,doc.versions[curRev].v],doc.versions[curRev]);
}
вызов:
/ byRev? Startkey = ["5374"] & endkey = [" 5374 ", {}]
результат:
{id:" docHistoryContainer_5374 ", ключ = [5374,1] значение = {... doc_content v1 ....}} {id: "docHistoryContainer_5374", key = [5374,2] value = {... doc_content v2 ....}}
Дополнительно теперь вы также можете написатькарта-функция, которая соответствует дате в ключе, так что выможно запросить изменения в диапазоне дат