我需要一个解决方法,因为MongoDB不支持稀疏唯一复合索引(如果不存在,则将值设置为
我认为我只需添加此索引即可防止cronjob运行两次时出现重复副本。
很遗憾,如上所述,MongoDB不支持在复合索引上使用“sparse”。这意味着对于一次性事件,“parent”字段不存在,并且由MongoDB设置为“null”。如果我现在在同一时间有第二个一次性事件,则会导致重复键错误,而我只希望在设置了父级时才出现此错误。
有什么想法吗?
编辑:我已经看到了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”字段不存在,并且由MongoDB设置为“null”。如果我现在在同一时间有第二个一次性事件,则会导致重复键错误,而我只希望在设置了父级时才出现此错误。
有什么想法吗?
编辑:我已经看到了MongoDB:具有稀疏值的唯一和稀疏复合索引,但在应用程序级别检查唯一性是不可行的。我的意思是,数据库就是为了保证唯一性而存在的。