mongodb - MongoRepository 在数组中查找列表

标签 mongodb spring-boot spring-data-mongodb

我有一个看起来像这样的文档

@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 mongodbmongodb 数据存储上进行操作。 我创建了界面

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
        ]
    }
]

但除非我不向 findByTags 方法提供 tag1、tag2、tag3 等标签列表,否则它不会返回任何结果。例如 tag1, tag2 什么都不返回等等。

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

最佳答案

这取决于你想提供什么。

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

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

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

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

所以第一个是您只希望 "tag1" 匹配数据的地方。第二个将匹配 List,例如 "tag1"、"tag2" 或任何只要“至少一个”实际存在于被搜索数组中的任何内容。

关于mongodb - MongoRepository 在数组中查找列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44736418/

相关文章:

Java Spring 如果出错则切换服务

java - Spring Data MongoDB 通过内部对象获取文档

kotlin - 将 spring-data-mongodb 与 Kotlin 一起使用时出现异常

java - 查找 spring-data-mongo MappingContext 内存泄漏

mongodb - 如何在多个字段中搜索文本或表达式

node.js - Mongoose 不删除子文档

python - 从 MongoDB 读取腌制 NumPy 数组的子集

mongodb - Mongodb 将字符串转换为数字以供查询

java.lang.IllegalStateException : No Feign Client for loadBalancing defined. 你忘了包括 spring-cloud-starter-netflix-ribbon 吗?

java - 如何在 Spring boot 中使用非实时数据源创建 Jar 文件?