запрос на возврат одного поля из данных весны Монго - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть несколько источников данных в моем приложении (mysql и mongodb), и я использую JpaRepository (spring data jpa) и MongoRepository (spring data mongo) соответственно.

Приведенный ниже код работает для получения всех чисел imeiиз таблицы транспортных средств (mysql)

@Repository
public interface VehicleRepo extends JpaRepository<Vehicle, Long>{
    @Query(value = "SELECT imei FROM vehicle", nativeQuery = true)
    public List<Object[]> findImei();
}

У меня есть еще один репозиторий Mongo, как показано ниже.

@Repository
public interface DeviceRepo extends MongoRepository<Device, String>{
    // looking for a method which returns all the distinct imei
}

Я хочу знать, что будет запросом в mongodb.

(Мое требование - выбрать все единственное отдельное поле imei на устройстве и выбрать только одно поле, например VehicleRepo)

Я пробовал несколько комбинаций, но ни одна не работала.

Ответы [ 3 ]

0 голосов
/ 08 апреля 2019

Вы также можете использовать mongoTemplate в пользовательском методе репозитория для получения того же (аналогично чужому) ответа выше:

 List<String> imeiList = mongoTemplate.query(Device.class)
.distinct("imei")
.as(String.class)
.all();

Дополнительная информация в последних документах spring-data-mongo: https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mongo-template.query.distinct

0 голосов
/ 02 мая 2019

Может быть немного поздно, но я делаю то же самое: если в вашей коллекции просто есть поле типа String (тип данных) и вы хотите получить только это поле, вы можете попробовать:

    @Query(value = "{ 'groupId' :  ?0 }", fields = "{ '_id': 0, 'user.$id':1 }")
    List<String> findAllUserIdByGroupId(String groupId);

значение означает запрос и тип поля - это то, что вы хотите получить / игнорировать

В dong mongo вы можете проверить с этим сайтом (https://docs.mongodb.com/manual/tutorial/project-fields-from-query-results/)

или ответ в Stackoverflow ( Spring Data Mongo Query Поле параметров )

0 голосов
/ 12 декабря 2018

Я не смог найти никакого решения с помощью @Query, поэтому мне пришлось использовать MongoTemplate для достижения того же.

DistinctIterable<String> iterableObject= mongoTemplate.getCollection("collectionName").distinct("fieldName",String.class);
Iterator<String> iter = iterableObject.iterator();      
while(iter.hasNext()){
    System.out.println(iter.next());
}
...