Spring Data MongoDB在父对象上传递唯一索引

问题描述 投票:0回答:1

在我的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作为字段的Submission实体:


@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,但我相信有更好的方法。

spring mongodb spring-data-mongodb
1个回答
0
投票

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

如果你仍然想要保持一个独特的工作,我可以想到利用mongo的unique compound index and missing values 。为电子邮件创建唯一的复合索引+为用户创建空字段。插入一个提交集,即用户空字段是唯一的(时间哈希或唯一提交ID),从而创建一个不会发生冲突的唯一复合索引。

© www.soinside.com 2019 - 2024. All rights reserved.