MongoRepository在Array中查找列表

时间:2017-06-24 12:33:31

标签: mongodb spring-boot spring-data-mongodb

我有document看起来像这样

@Document
public @Data class Note {

    @Id
    private String noteId;
    private String owner;
    @TextIndexed
    private String name;
    @TextIndexed
    private String text;
    private List<String> tags;
    private LocalDate date;
}

此外,我正在使用spring data mongodb来操作mongodb数据存储区。 我创建了界面

public interface NoteRepository extends MongoRepository<Note, String> {
    List<Note> findByTags(List<String> tags);
}

我存储的对象看起来像这样

[
    {
        "noteId": "594e4adc3bc5152218f933b4",
        "owner": "system",
        "name": "simple note",
        "text": "My text",
        "tags": [
            "tag1",
            "tag2",
            "tag3"
        ],
        "date": [
            1992,
            12,
            15
        ]
    }
]

但除非我不提供tag1, tag2, tag3findByTags方法的标记列表,否则它不会返回任何结果。例如,tag1, tag2不返回任何其他等等。

我应该如何搜索这些标签?使用一些TextCriteria

1 个答案:

答案 0 :(得分:2)

这取决于您想要提供的内容。

如果您只想要一个值,那么MongoDB并不关心数据是否在数组中而只是在所有条目中查找匹配

public interface NoteRepository extends MongoRepository<Note, String> {
    List<Note> findByTags(String tags);
}

如果你想要一个可变大小的列表来比较可能匹配的“any”,那么有一个keyword used by spring-mongo会影响$in操作:

public interface NoteRepository extends MongoRepository<Note, String> {
    List<Note> findByTagsIn(List<String> tags);
}

所以第一个是你希望"tag1"匹配数据的地方。第二个匹配List,如"tag1", "tag2",或任何东西,只要'至少一个'实际存在于被搜索的数组中。