2012-10-24 14 views
12

에서 삭제 된 문서에 대한 공식 문서에서 권장하는 복제 충돌을 해결하는 방법을 복제 충돌을 해결하는 것입니다 :CouchDB를

  1. 모든 버전에 대한 문서를 가져 오기 (예보기를 통해) 문서의 _conflicts 필드를 사용하여 충돌 수정 읽기
  2. 는 응용 프로그램 별
  3. 원치 않는 수정
를 제거 병합을 수행 등재

병합 할 때 문제가 발생하면 문서를 삭제했습니다. _conflicts 필드에는 표시되지 않지만 _deleted_conflicts 필드에는 표시되지 않습니다. _conflicts 필드만을 사용하여 병합하고 로컬 데이터베이스에서 문서를 삭제하고 원격 복제본에서 편집하면 복제시 로컬로 복원됩니다. 내 응용 프로그램 모델에서는 병합 할 때 삭제가 항상 우선한다고 가정합니다. 삭제 된 문서는 편집 내용과 관계없이 삭제 된 상태로 유지됩니다.

언뜻보기에 가장 간단한 방법은 _deleted_conflicts이 비어 있지 않은지 확인하고 비어 있지 않으면 문서를 삭제하는 것입니다. 음 ...이 문제는 # 4 단계에서 편집 충돌을 해결하여 가져온 삭제 된 버전을 포함 할 수 있으므로이 경우 _deleted_conflicts의 의미가 모호합니다.

문서를 삭제 된 것으로 표시하고 응용 프로그램 계층에서 필터링하는 것과 같은 전반적인 작업을 포함하지 않는 CouchDB (있는 경우)에서 삭제 충돌을 처리하는 표준 방법은 무엇입니까?

답변

5

가장 좋은 해결책은 예약 된 속성 _deleted을 사용하여 HTTP DELETE 대신 문서를 제거하는 것입니다. 그런 다음 다른 속성을 설정 무료입니다 :

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

그런 다음 병합 과정에서 _changes이 _deleted_conflicts에 대한 공급 확인 true로 설정 deletedByUser 플래그가 _deleted_conflicts 내에서 개정이있을 경우 문서를 삭제합니다.

도움이 되었기를 바랍니다.

관련 문제