cnm*_*muc 5 java spring mongodb spring-boot
在 Spring boot + MongoDB 应用程序中,我正在尝试为电子邮件字段创建唯一索引。
@Document
public class User {
    @Id
    private String id;
    @Indexed(unique = true)
    private String email;
}
public interface UserRepository extends MongoRepository<User, String>
但是我仍然可以使用相同的电子邮件插入两个用户对象,所以
userRepository.save(new User("my@email.com"))
userRepository.save(new User("my@email.com"))
在用户集合中创建两个条目。
我究竟做错了什么?
我知道Spring Data MongoDB - 在哪里以编程方式为 Mongo 集合创建索引?,但我正在寻找“仅注释”的解决方案。
Tim*_*mes 11
我引用了文档:
Spring Data MongoDB 可以自动为用@Document 注释的实体类型创建索引。自 3.0 版起,必须显式启用索引创建,以防止对集合生命周期和性能产生不良影响。
您是否启用了自动索引创建?因为如果你没有这样做,那很可能就是你的独特约束没有得到尊重的原因。您可以通过连接到 MongoDB 实例并运行db.user.getIndexes(). 这将打印用户集合的索引。
使用 Spring Boot,您可以使用以下配置启用自动索引创建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 无法在指定索引字段上创建唯一索引。
因此,如果您的集合中很少有文档已经具有相同的电子邮件值,那么如果您尝试在电子邮件字段上创建索引,它可能不起作用。检查您是否有此类文件。
| 归档时间: | 
 | 
| 查看次数: | 3092 次 | 
| 最近记录: |