У меня есть следующее POJO.Запрос хранилища с параметром List в Spring Data 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;
}
}
Я пытаюсь реализовать MongoRepository
запрос, который находит все Question
S, которые содержат список тегов. Я попытался следующие:
@Repository
public interface QuestionRepository extends MongoRepository<Question, String> {
List<Question> findByTags(List<String> tags);
}
, но это работает только когда List
тегов, которые я передаю методу полностью совпадает со списком тегов, назначенных на вопрос в Монго. Например. если у меня есть вопрос в 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.
могли бы вы посоветовать, как реализовать этот пользовательский запрос
приятный поиск. должно ли ключевое слово быть в конце имени метода? спасибо – Harshana
Что делать, если мы хотим найти вопросы, имеющие хотя бы 1 тег? без знания тега? –
получил! @Query ("{tags: {$ exists: true}, $ where: 'this.tags.length> 0'}") –