MongoDB は疎な一意の複合インデックスをサポートしていないため、回避策が必要です (null
存在しない場合は値を設定しますが、非複合インデックスの場合はインデックスにフィールドを追加しません)。https://jira.mongodb.org/browse/SERVER-2193を参照してください
私の特定のケースでは、events
. 1 回限りの場合も、繰り返し発生する場合もあります。parent
イベントが定期的なイベントのインスタンスである場合にのみ存在するフィールドがあります (親の新しいコピーを定期的に作成して、システムで次の週の定期的なイベントを保持します)。
cronjobが2回実行されたときに重複コピーを防ぐために、このインデックスを追加するだけだと思いました
events.ensureIndex({ dateFrom: 1, dateTo: 1, parent: 1 }) { sparse: true, unique: true }
sparse
残念ながら、上で述べたように、MongoDB は複合インデックスをサポートしていません。これが意味することは、1 回限りのイベントの場合、このparent
フィールドは存在せずnull
、MongoDB によって設定されるということです。同時に 2 番目の 1 回限りのイベントがあると、重複キー エラーが発生します。これは、親が設定されている場合にのみ必要です。
何か案は?
編集: MongoDB: Unique and sparse Compound indexs with sparse valuesを見たことがありますが、アプリケーション レベルで一意性をチェックすることはできません。つまり、一意性を保証するためにデータベースが存在するのです。