@Indexed嵌套属性在 mongo 的 Spring 数据中不起作用

2022-09-04 05:47:42

我有以下对象结构:

@Document(collection = "user")
@TypeAlias("user")
public class User {
    @Id
    private ObjectId id;
    private Contact info = new Contact();
}

这是联系宝乔:

public class Contact {
    @Indexed(unique = true)
    private String mail;
}

但是由于一些我不知道的原因,我没有看到Spring-data为属性info.mail创建唯一的索引。

总而言之,我有这个json结构的用户对象:{_id:xxxxx,info:{mail:“abc@xyz.shoes”}}

我想使用具有上述pojo结构的Spring数据在info.mail上创建一个唯一的索引。请帮忙。


答案 1

据我所知,用@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();
}

答案 2

在我的情况下,我有一个全新的Spring boot应用程序2.3.0,只有@Document,@Id和@Indexed注释。我能够检索和插入文档,但它拒绝创建PK以外的索引。最后,我认为您需要启用一个属性。

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

事实上,它甚至可以在没有@Document注释的情况下处理嵌套对象。

希望这有助于:)