Способом разрешения конфликтов репликации, рекомендованных официальной документацией, является:
- Прочитайте конфликтующие версии с использованием поля document
_conflicts(например, через представление) - Получить документы для всех перечисленных изменений
- Выполнение слияния приложений
- Удаление нежелательных изменений
Проблема возникает, когда я хочу объединить удаленные документы. Они не отображаются в поле _conflicts, но в _deleted_conflicts. Если я объединю только поле _conflicts, и документ будет удален в локальной базе данных и отредактирован в удаленной реплике, он будет обновлен локально при репликации. Моя модель приложения предполагает, что при объединении удаление всегда имеет приоритет: удаленные документы остаются удаленными независимо от того, с каким изменением он конфликтует.
Итак, на первый взгляд проще всего проверить, что _deleted_conflicts не пуст, и если он не пуст, удалите документ, правильно? Ну... проблема заключается в том, что это может также содержать удаленные ревизии, которые были введены путем разрешения конфликтов редактирования на шаге 4, поэтому значение _deleted_conflicts в этом случае является неоднозначным.
Каков канонический способ обработки конфликтов удаления в CouchDB (если есть), который не включает в себя выполнение грубых вещей, таких как маркировка документов как удаленных и фильтрующих на уровне приложения?