Mam następujące POJO.Zapytanie repozytorium z parametrem listy w danych źródłowych MongoDB
@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;
}
}
Próbuję zaimplementować MongoRepository
zapytanie, które wyszukuje wszystkie Question
s, które zawierają listę tagów. Próbowałem następujące:
@Repository
public interface QuestionRepository extends MongoRepository<Question, String> {
List<Question> findByTags(List<String> tags);
}
ale to działa tylko wtedy, gdy List
tagów że jestem przechodzących do sposobu w pełni dopasowuje listę tagów przypisanych do pytania w Mongo. Na przykład. jeśli mam pytanie w Mongo z listą tagów [ "t1", "t2", "t3" ]
, to nie jest zwracana przez findByTags(List)
, kiedy przekazuję [ "t1", "t2" ]
do metody.
Próbowałem następujących także:
@Repository
public interface QuestionRepository extends MongoRepository<Question, String> {
@Query("{ tags: { $all: ?0 } }")
List<Question> findByTags(List<String> tags);
}
ale wtedy mój war
nie mógł zostać wdrożony do mojego kontenera serwletów w ogóle. (Pojawia się następujący błąd w tym przypadku:
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.
mógłby Pan doradzić, w jaki sposób do realizacji tego niestandardowego zapytania
fajne odkrycie. czy słowo kluczowe musi znajdować się na końcu nazwy metody? dzięki – Harshana
Co zrobić, jeśli chcemy znaleźć pytania, które mają co najmniej 1 tag? bez znajomości tagu? –
mam !! @Query ("{tags: {$ exists: true}, $ where: 'this.tags.length> 0'}") –