Как мне получить отдельные поля из MongoRepository / QueryDSL?

#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);
}