hel*_*ava 8 java spring mongodb spring-data-mongodb
我有以下对象结构:
@Document(collection = "user")
@TypeAlias("user")
public class User {
@Id
private ObjectId id;
private Contact info = new Contact();
}
Run Code Online (Sandbox Code Playgroud)
这是联系人pojo:
public class Contact {
@Indexed(unique = true)
private String mail;
}
Run Code Online (Sandbox Code Playgroud)
但由于我不知道的一些原因,我没有看到Spring-data为属性info.mail创建一个唯一的索引
总而言之,我有这个用户对象的json结构: {_ id:xxxxx,info:{mail:"abc@xyz.shoes"}}
我想使用具有上述pojo结构的Spring数据在info.mail上创建一个唯一索引.请帮忙.
Mac*_*iak 20
据我所知,用@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();
}
Run Code Online (Sandbox Code Playgroud)
就我而言,我有一个全新的 Spring Boot 应用程序 2.3.0,只有 @Document、@Id 和 @Indexed 注释。我能够检索和插入文档,但它拒绝创建 PK 以外的索引。最后我认为您需要启用一个属性。
spring.data.mongodb.auto-index-creation = true
事实上,它甚至适用于没有 @Document 注释的嵌套对象。
希望这可以帮助 :)
过时的答案,这是旧版本的 mongodb 1.x。
有同样的问题,你的Contact班级似乎缺少@Document注释,即
@Document
public class Contact {
@Indexed(unique = true)
private String mail;
}
Run Code Online (Sandbox Code Playgroud)
应该有效,引用自spring mongodb 参考
自动索引创建仅适用于用@Document 注释的类型。