让我们说我有以下数据库实体:
@Document(collection = "users")
public class User {
@Id
private String id;
private String firstname;
private String lastname;
private String email;
}
如何强制字段电子邮件是唯一的?这意味着当应用程序尝试保存实体时,MongoDB应检查具有此电子邮件地址的用户记录是否已存在。
此致 斯特芬
答案 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