一尘不染

Spring Data MongoDB中具有List参数的存储库查询

java

我有以下POJO。

@Document(collection = "questions")
public class Question {

    @Id
    private String id;

    public List<String> getTags() {
        return tags;
    }

    public void setTags(List<String> tags) {
        this.tags = tags;
    }
}

我正在尝试实现一个MongoRepository查询,该查询查找Question包含标签列表的所有。我尝试了以下方法:

@Repository
public interface QuestionRepository extends MongoRepository<Question, String> {
    List<Question> findByTags(List<String> tags);
}

但这仅在List我传递给该方法的标记的完全匹配在Mongo中分配给该问题的标记的列表时才有效。例如,如果我在Mongo中有一个带有标签列表的问题,当我传递给该方法时,[ "t1", "t2", "t3" ]它不会返回。findByTags(List)``[ "t1", "t2" ]

我也尝试了以下方法:

@Repository
public interface QuestionRepository extends MongoRepository<Question, String> {
    @Query("{ tags: { $all: ?0 } }")
    List<Question> findByTags(List<String> tags);
}

但是我war根本无法部署到我的servlet容器。(在这种情况下,我收到以下错误消息:

The web application [backend] appears to have started a thread named [cluster-1-db:27017] but has failed to stop it. This is very likely to create a memory leak.

您能否建议如何实施该自定义查询?


阅读 332

收藏
2020-12-03

共1个答案

一尘不染

我将自己回答问题,因为我自己才找到答案。Spring Data MongoDB文档中的以下部分列出了Spring用于其查询派生的所有受支持的关键字:

http://docs.spring.io/spring-
data/mongodb/docs/current/reference/html/#repository-query-
keywords

以下实现适用于上述用例:

@Repository
public interface QuestionRepository extends MongoRepository<Question, String> {
     List<Question> findByTagsIn(List<String> tags);
}
2020-12-03