我有以下对象结构:
@Document(collection = "user")
@TypeAlias("user")
public class User {
@Id
private ObjectId id;
private Contact info = new Contact();
}
这是联系人pojo:
public class Contact {
@Indexed(unique = true)
private String mail;
}
但由于我不知道的一些原因,我没有看到Spring-data为该属性创建唯一索引 info.mail
总结一下,我有这个用户对象的json结构: 的 {_ ID:XXXXX,信息:{邮件: “abc@xyz.shoes”}}
我想使用具有上述pojo结构的Spring数据在 info.mail 上创建一个唯一索引。请帮忙。
答案 0 :(得分:18)
据我记忆,用@Indexed注释嵌入字段是行不通的。 @CompoundIndex是要走的路:
@Document(collection = "user")
@TypeAlias("user")
@CompoundIndexes({
@CompoundIndex(name = "contact_email", def = "{ 'contact.mail': 1 }", unique = true)
})
public class User {
@Id
private ObjectId id;
private Contact info = new Contact();
}
答案 1 :(得分:4)
如果出现同样的问题,您的Contact
课程似乎缺少@Document
注释,即
@Document
public class Contact {
@Indexed(unique = true)
private String mail;
}
应该有效,请引用spring mongodb reference
仅对使用@Document注释的类型执行自动索引创建。
答案 2 :(得分:3)
就我而言,我有一个仅带有@ Document,@ Id和@Indexed批注的全新Spring Boot应用程序2.3.0。我能够检索和插入文档,但是它拒绝创建除PK以外的索引。最终,我发现需要启用一个属性。
spring.data.mongodb.auto-index-creation = true
事实上,它甚至可以在没有@Document批注的嵌套对象上使用。
希望这会有所帮助:)