2012-10-24 7 views
12

で削除された文書のための複製の競合を解決する公式ドキュメントで推奨複製の競合を解決する方法は次のとおりです。CouchDBの

  1. (ビュー経由など)ドキュメントの_conflictsフィールドを使用して、競合リビジョンを読む
  2. は、すべてのリビジョンのドキュメントを取得します
  3. を記載されている不要な改正
を削除し、アプリケーション固有の
  • をマージを実行します

    問題は、私は文書を削除マージしたいときに来ます。彼らは、しかし_deleted_conflictsで、_conflictsフィールドに表示されません。私は_conflictsフィールドを使用してマージし、文書をローカルデータベースに削除され、リモートレプリカで編集されている場合は、レプリケーションでローカルに復活されます。削除された文書を関係なく、それはと競合する編集内容の削除ままに:私のアプリケーション・モデルは、合併時に削除が常に優先されることを前提としています。

    一見すると、最も簡単なことは、_deleted_conflictsが空でないことをチェックし、空でない場合は、文書を削除するかどうかです。うーん...これに伴う問題は、これはステップ#4で編集の競合を解決することによって、導入された削除されたリビジョンを含んでいてもよいということなので、_deleted_conflictsの意味は、この場合にはあいまいです。

    削除されたとして、文書をマークし、アプリケーション層でのフィルタリングなどの総額をやっ含まないのCouchDB(もしあれば)で削除競合を処理する標準的な方法は何ですか?

  • 答えて

    5

    HTTP DELETEではなく、予約されたプロパティ_deletedを使用してドキュメントを削除することをお勧めします。そして、あなたはまた、他のプロパティを設定するのは自由です。

    doc._deleted = true; 
    doc.deletedByUser = true; 
    doc.save(); 
    

    そして、マージ処理に_changesは_deleted_conflicts用飼料チェックしtrueに設定deletedByUser旗を持っている_deleted_conflicts内のリビジョンがある場合は、文書を削除します。

    こちらがお役に立てば幸いです。