在我的Spring MVC应用程序中,我有以下Mongo实体:
@Document(collection = "users")
public class UserMongoEntity {
@Id
private String id;
@NotBlank
@Email
@Indexed(unique = true, sparse = true)
private String email;
private String firstName;和一个包含User作为字段的提交实体:
@Document(collection = "submissions")
public class SubmissionMongoEntity {
@Id
private String id;
private Instant timestamp;
@Valid
private UserMongoEntity user;当我请求插入新用户时,如果已存在具有相同电子邮件的用户,则会出现错误,正如预期的那样。但是,当我两次插入同一个用户的提交时,我得到了一个异常,因为它违反了索引的唯一性:duplicate key error collection: user.email dup key。
我可以移除@Indexed,但我相信有更好的方法。
发布于 2019-04-05 03:26:54
据我所知,没有办法“禁用”嵌套文档的唯一性。正如在这篇 question 中回答的那样,mongo索引的主要目的是加速某些查询,而不是数据验证。
如果你还想保持独特性,我可以考虑利用mongo的unique compound index and missing values 。为电子邮件创建一个唯一的复合索引+为用户创建一个空字段。在插入提交时,将用户空字段设置为惟一(时间散列或唯一提交id),从而创建不会冲突的唯一复合索引。
https://stackoverflow.com/questions/55522462
复制相似问题