Spring Data MongoDB применяет уникальный индекс транзитивно на родительский объект - PullRequest
0 голосов
/ 04 апреля 2019

В моем приложении 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;

и объект отправки, содержащий пользователя в качестве поля:


@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, но я считаю, что есть лучший способ.

1 Ответ

0 голосов
/ 04 апреля 2019

Насколько я знаю, нет способа "отключить" уникальность для вложенных документов.как ответили в этом вопросе mongo indexes, главная цель - ускорить определенные запросы и, в меньшей степени, о проверке данных.

, если вы все еще хотите сохранить уникальность, которую можно обдумать,использование уникального составного индекса Монго и пропущенных значений .создать уникальный составной индекс для электронной почты + пустое поле для пользователя.в то время как вставка отправки устанавливает, что пользовательское нулевое поле должно быть уникальным (либо временной хэш, либо уникальный идентификатор отправки), тем самым создавая уникальный составной индекс, который не будет конфликтовать.

...