Spring MongoDB-@Indexed和@Field批注之间的区别

时间:2019-07-19 05:20:53

标签: java spring mongodb spring-boot

我试图理解在Java Spring Boot中定义模型时@Indexed@Field的两个不同注释如何不同。

public class Notation {
    @Id
    private String id;

    @Field("value")
    private String value;

    @Field("description")
    private String description;

    @Field("frequency")
    private int frequency;
}
public class Notation {
    @Id
    private String id;

    @Indexed("value")
    private String value;

    @Indexed("description")
    private String description;

    @Field("frequency")
    private int frequency;
}

我的用例是最终基于valuedescription字段从存储库中进行搜索,因此最好了解一下如何在这两个字段中构造数据。这些注释中可以使用哪些选项?

1 个答案:

答案 0 :(得分:1)

@Indexed注释将在您的mongo服务器中的该字段上添加一个索引。它带有一个可选的字符串参数,该参数将是索引名称,而与字段名称无关。您应该只索引将用于过滤文档的那些字段。

如果要在Java代码和MongoDB集合中使用不同的名称,请使用

@Field。

例如。

r = { "[": "", ".": "\n", "]": ""}

for x,y in r.items():
        out = out.replace(x, y)

在这种情况下,在您的MongoDB集合中,您会发现字段名称为“ desc”,而在Java代码中,您会将其引用为“描述”

@Field("desc")
private String description;

在上述情况下,无需使用@Field批注