Spring Data:MongoDB文档中的唯一字段

时间:2018-03-20 13:10:27

标签: mongodb spring-data

让我们说我有以下数据库实体:

@Document(collection = "users")
public class User {

    @Id
    private String id;

    private String firstname;

    private String lastname;

    private String email; 

}

如何强制字段电子邮件是唯一的?这意味着当应用程序尝试保存实体时,MongoDB应检查具有此电子邮件地址的用户记录是否已存在。

此致 斯特芬

4 个答案:

答案 0 :(得分:3)

首先,在模型的字段上方使用Indexed批注,如下所示:

@Indexed(unique = true)
private String email;

此外,您还应该以编程方式定义索引。定义MongoTemplate时,应使用以下代码。

mongoTemplate.indexOps("YOUR_COLLECTION_NAME").ensureIndex(new Index("YOUR_FEILD_OF_COLLECTION", Direction.ASC).unique());

对于您的情况,您应该使用:

mongoTemplate.indexOps("users").ensureIndex(new Index("email", Direction.ASC).unique());

答案 1 :(得分:1)

Mongodb需要创建一个字段并建立索引,以便知道该字段是否唯一。

@Indexed(unique=true)
private String email;

答案 2 :(得分:0)

从 Spring Data MongoDB 3.0 开始,自动索引创建默认关闭。所以基本上除了使用 @Indexed 之外,您还必须配置默认索引选项。您需要做的是在 spring.data.mongodb.auto-index-creation=true 文件中制作 application.properties,然后 @Indexed 会像魅力一样工作!

答案 3 :(得分:0)

*这对我有用,但你必须删除你的数据库,然后重新运行你的应用程序 *

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