首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Data MongoDB在父对象上传递应用唯一索引

问Spring Data MongoDB在父对象上传递应用唯一索引
EN

Stack Overflow用户
提问于 2019-04-05 02:09:22
回答 1查看 476关注 0票数 0

在我的Spring MVC应用程序中,我有以下Mongo实体:

代码语言:javascript
复制
@Document(collection = "users")
public class UserMongoEntity {

  @Id
  private String id;

  @NotBlank
  @Email
  @Indexed(unique = true, sparse = true)
  private String email;

  private String firstName;

和一个包含User作为字段的提交实体:

代码语言:javascript
复制
@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,但我相信有更好的方法。

EN

回答 1

Stack Overflow用户

发布于 2019-04-05 03:26:54

据我所知,没有办法“禁用”嵌套文档的唯一性。正如在这篇 question 中回答的那样,mongo索引的主要目的是加速某些查询,而不是数据验证。

如果你还想保持独特性,我可以考虑利用mongo的unique compound index and missing values 。为电子邮件创建一个唯一的复合索引+为用户创建一个空字段。在插入提交时,将用户空字段设置为惟一(时间散列或唯一提交id),从而创建不会冲突的唯一复合索引。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55522462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档