Spring Boot MongoRepository, получить все строки, но только определенные поля

#java #spring #mongodb #spring-boot #spring-data-mongodb

#java #spring #mongodb #spring-boot #spring-data-mongodb

Вопрос:

Я пытаюсь получить все записи в моей базе данных, но только reference поля. В моем MongoRepository случае я хочу использовать пользовательский запрос, поэтому он не использует имя метода для создания запроса. Похоже, следующее не работает:

 public interface JvRepository extends MongoRepository<Jv, String> {
    @Query(value = "{}", fields = "{ id : 0, reference : 1 }")
    public List<String> findAllJvReferences();
}

public class Jv {
    @Id
    private String id;

    private String reference;
}
  

Ошибка:

Jv не может быть приведен к java.lang.String

Я говорю ему, чтобы id он не получал, и reference правильно ли это? Почему он не возвращает a String , но все же a Jv ?

Я думаю, я должен передать что-то в значении, которое указывает Mongo выбрать все, но я понятия не имею, что. Или что-то еще не так с этим кодом?

Комментарии:

1. Используйте List<Jv> вместо List<String> . Не волнуйтесь id , поле не будет заполнено

2. Это работает, да, все остальные поля равны нулю. Но нет ли способа, чтобы он действительно возвращал список строк, поскольку этот метод используется REST API, который должен возвращать только ссылки в списке. Я думаю, я мог бы перебрать список<Jv> и извлечь ссылки, но я надеялся, что этого не нужно делать.

3. Я думаю, вы могли бы предоставить пользовательскую реализацию, но возврат List<Jv> — это более простой подход. Вы можете просто преобразовать его в List<String> , используя Stream API Java 8, jvs.stream().map(Jv::getReference).collect(Collectors.toList())

4. Хм, да, думаю, я буду придерживаться этого. Большое спасибо!