公式ドキュメントで推奨されているレプリケーションの競合を解決する方法は次のとおりです。
_conflicts
ドキュメントのフィールドを使用して競合するリビジョンを読み取る(例: ビュー経由)- リストされているすべてのリビジョンのドキュメントを取得します
- アプリケーション固有のマージを実行する
- 不要なリビジョンを削除する
削除されたドキュメントをマージしたいときに問題が発生します。_conflicts
それらはフィールドには表示されませんが、 _deleted_conflicts
. フィールドのみを使用してマージし_conflicts
、ドキュメントがローカル データベースで削除され、リモート レプリカで編集された場合、レプリケーションでローカルに復元されます。私のアプリケーション モデルでは、マージ時に削除が常に優先されると想定しています。削除されたドキュメントは、競合する編集に関係なく、削除されたままになります。
では、一見、空でないことを確認し、_deleted_conflicts
空でない場合はその文書を削除するのが最も簡単ですよね? うーん...これの問題は、ステップ 4 で編集の競合を解決することによって導入された削除されたリビジョンも含まれている可能性があるため、_deleted_conflicts
この場合の の意味はあいまいです。
ドキュメントを削除済みとしてマークしたり、アプリケーション層でフィルタリングしたりするような大雑把なことを行わずに、CouchDB で削除の競合を処理する標準的な方法は何ですか?