Допустим, у меня есть эти три документа:
{ "_id": "11111", "type": "template", "name": "person" }
{ "_id": "22222", "type": "template", "name": "place" }
{ "_id": "33333", "type": "template", "name": "thing" }
У меня есть облачная база данных, а затем у меня есть устройство с синхронизацией pouchDB из этой базы данных.
Это шаги, которые яdo:
- Я синхронизирую обе базы данных вместе.Итак, теперь у меня есть самые последние версии этого документа на моем устройстве.
- Я запускаю приведенный ниже запрос и получаю все три шаблона, например, так:
Код
var template_obj = {};
return device_db.query('filters/templates')
.then((templates) => {
for (let t of templates.rows) templates_obj[t.id] = true;
return templates_obj;
});
фильтры / шаблоны
function (doc) {
if(doc.type == "template")
emit(doc._id);
}
возврат
{ "11111": true, "22222": true, "33333": true }
Обновляю шаблон: человек на облаке.И тогда я обновляю это снова.Таким образом, 2 ревизии прошли без синхронизации с моим устройством.
Я синхронизируюсь с моим устройством.
Теперь, когда я запускаю тот же запрос и получаю тольконазад документ, который я отредактировал.Что странно, потому что я не касался других документов.То же представление возвращает ожидаемые результаты в облаке, но не на устройстве.
return
{"11111": true}
Однако, если я сделаю следующий код, все шаблоны вернутся как обычно, и на устройстве появится тот же самый
_rev
из облака.Это означает, что синхронизация прошла успешно, а представление запуталось.
новый код
return device_db.allDocs({conflicts: true})
.then((data) => {
for (let d of data.rows) {
if(d.doc.type == "template") {
templates_obj[d.doc._id] = true;
}
}
return templates_obj;
}).catch((err) => {
console.log(JSON.stringify(err));
})
Я начинаю верить, что это ошибка, потому что если яуничтожьте мою базу данных и повторите эти шаги, я могу воспроизвести эту проблему.