#java #spring #spring-data #querydsl
#java #весна #spring-данные #querydsl
Вопрос:
Мой документ
@QueryEntity @Data @Document(collection = "MyCol") public class MyCol {
@Id private String _id;
private String version;
Я хочу получить все отдельные версии, сохраненные в БД.
Мои попытки:
public interface MyColDao extends MongoRepository<MyCol, String>, QueryDslPredicateExecutor<MyCol> {
@Query("{ distinct : 'MyCol', key : 'version'}")
List<String> findDistinctVersion();
}
Или просто найдите distinctversion без аннотации запроса.
Большинство примеров github имеют поля типа
List<Person> findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);
Мне не нужно поле By.
Еще один пример, который я нашел здесь.
@Query("{ distinct : 'channel', key : 'game'}")
public JSONArray listDistinctGames();
Похоже, это не работает для меня.
Кажется, я не могу найти документацию QueryDSL / Morphia для этого.
Ответ №1:
public interface MyColDao extends MongoRepository<MyCol, String>, QueryDslPredicateExecutor<MyCol> {
@Query("{'yourdbfieldname':?0}")
List<String> findDistinctVersion(String version);
}
здесь версия заменяет ваше имя поля вашей базы
данных подробнее вы можете увидеть здесь
Комментарии:
1. Спасибо за ответ. Я пытался получить список всех версий, которые не являются конкретной версией. Будет ли этот код делать это?
2. Я тоже ищу то же самое. Если вы нашли это, не могли бы вы добавить его в качестве ответа? Я могу это принять.
Ответ №2:
В этой документации spring содержится подробная информация о том, как сформировать выражение, когда вы хотите получить различные значения.
Ответ №3:
У меня была похожая проблема, но я не мог понять, как это сделать в пределах MongoRepository
(насколько я могу судить, в настоящее время это невозможно), поэтому MongoTemplate
вместо этого использовал.
Я считаю, что следующее будет соответствовать вашим требованиям.
@AutoWired
MongoTemplate mongoTemplate
public List<String> getVersions(){
return mongoTemplate.findDistinct("version", MyCol.class, String.class);
}