繁体   English   中英

MongoDB 未在 spring 引导中创建唯一索引

[英]MongoDB unique index not created In spring boot

在 Spring 启动 + MongoDB 应用程序中,我正在尝试为 email 字段创建唯一索引。

@Document
public class User {

    @Id
    private String id;

    @Indexed(unique = true)
    private String email;

}
public interface UserRepository extends MongoRepository<User, String>

但是我仍然可以插入两个具有相同 email 的用户对象,所以

userRepository.save(new User("my@email.com"))
userRepository.save(new User("my@email.com"))

在用户集合中创建两个条目。

我究竟做错了什么?

我知道Spring 数据 MongoDB - 在哪里以编程方式为 Mongo 集合创建索引? ,但我正在寻找“仅注释”的解决方案。

我引用文档

Spring 数据 MongoDB 可以自动为带有@Document 注释的实体类型创建索引。 从 3.0 版开始,必须显式启用索引创建,以防止对集合生命周期和性能造成不良影响。

您是否启用了自动索引创建? 因为如果您不这样做,那很可能就是您的唯一约束不被遵守的原因。 您可以通过连接到 MongoDB 实例并运行db.user.getIndexes()来验证不存在索引。 这将打印您的用户集合的索引。

使用 Spring 引导,您可以在application.yml中使用以下配置启用自动索引创建:

spring:
  data:
    mongodb:
      auto-index-creation: true

或者,如果您更喜欢属性:

spring.data.mongodb.auto-index-creation=true

检查 - https://docs.mongodb.com/manual/core/index-unique/

它指出 - 如果集合已经包含违反索引唯一约束的数据,MongoDB 无法在指定的索引字段上创建唯一索引。

因此,如果您的集合中如果您的文档已经很少具有相同的 email 值,那么如果您尝试在 email 字段上创建索引,它可能无法正常工作。 检查您是否有此类文件。

我解决了以下问题: Spring Data: Unique field in MongoDB document

所以你应该在 MongoTemplate + @indexed 注释中创建索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM