我需要一个解决方法,因为 MongoDB 不支持稀疏的唯一复合索引(null
如果不存在,它会将值设置为,而当它是非复合索引时,它不会将字段添加到索引中)。见https://jira.mongodb.org/browse/SERVER-2193
在我的特殊情况下,我有events
. 它们可以是一次性的,也可以是重复的。我有一个字段,该字段parent
仅在事件是重复事件的实例时才存在(我定期创建父项的新副本以在系统中的下几周拥有重复事件)。
我想我只是添加这个索引,以防止 cronjob 运行两次时出现重复副本
events.ensureIndex({ dateFrom: 1, dateTo: 1, parent: 1 }) { sparse: true, unique: true }
不幸的是,如上所述,MongoDB 不支持sparse
复合索引。这意味着对于一次性事件,该parent
字段不存在并且null
由 MongoDB 设置。如果我现在同时有第二个一次性事件,它会导致重复键错误,我只在设置 parent 时才需要。
有任何想法吗?
编辑:我见过MongoDB: Unique and sparse complex index with sparse values,但是在应用程序级别检查唯一性是不行的。我的意思是这就是数据库的用途,以保证唯一性。