次のような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
サーブレット コンテナーにまったくデプロイできませんでした。(その場合、次のエラーが発生します。
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.
そのカスタムクエリを実装する方法についてアドバイスをいただけますか?
ベストアンサー1
自分で答えを見つけたので、自分の質問に答えます。Spring Data MongoDB ドキュメントの次のセクションには、Spring がクエリ導出に使用するサポートされているすべてのキーワードがリストされています。
http://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#リポジトリクエリキーワード
上記のユースケースでは、次の実装が機能します。
@Repository
public interface QuestionRepository extends MongoRepository<Question, String> {
List<Question> findByTagsIn(List<String> tags);
}