MongoDB는 희귀 고유 복합 인덱스를 지원하지 않기 때문에 해결 방법이 필요합니다 (존재하지 않으면 값을 null
으로 설정하지만 인덱스가없는 인덱스는 필드에 추가하지 않습니다) 비 복합 지수). https://jira.mongodb.org/browse/SERVER-2193지원되지 않는 희귀 고유 복합 인덱스에 대한 MongoDB 해결 방법
내 경우에는 내가 events
입니다. 그들은 한 번 또는 반복 될 수 있습니다. 나는 이벤트가 반복 이벤트의 인스턴스 일 때만 존재하는 필드 parent
을 가지고 있습니다 (정기적으로 시스템의 다음 주 동안 반복 이벤트를 갖기 위해 부모의 새 복사본을 주기적으로 생성합니다).
sparse
을 지원하지 않습니다 MongoDB를 위에서 말했듯 cronjob를 불행하게도 두 번
events.ensureIndex({ dateFrom: 1, dateTo: 1, parent: 1 }) { sparse: true, unique: true }
을 실행할 때 난 그냥 중복 사본을 방지하기 위해이 인덱스를 추가 할 거라고 생각했다. 즉, 일회성 이벤트의 경우 parent
필드가 존재하지 않으며 MongoDB에서 null
으로 설정됩니다. 같은 시간에 두 번째 일회성 이벤트가 생기면 중복 키 오류가 발생합니다. 상위 오류가 발생했을 때만 원하는 오류가 발생합니다.
아이디어가 있으십니까?
편집 : MongoDB: Unique and sparse compound indexes with sparse values을 보았지만 응용 프로그램 수준에서 고유성을 검사하는 것은 아무런 의미가 없습니다. 나는 그것이 데이터베이스가 존재하는 것을 의미합니다. 유일성을 보장합니다.
가능한 속담 https://stackoverflow.com/questions/45675385/mongodb-compound-sparse-indexes – JohnnyHK