查询以从Spring Data Mongo返回单个字段

时间:2018-12-12 14:50:51

标签: mysql mongodb spring-boot spring-data-jpa spring-data-mongodb

我的应用程序中有多个数据源(mysql和mongodb),分别使用JpaRepository(spring数据jpa)和MongoRepository(spring数据mongo)。

以下代码可用于从车辆表(mysql)获取所有imei编号

@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 :(得分:0)

我无法使用@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());
}

答案 1 :(得分:0)

您还可以在自定义存储库方法中使用Delay来实现与上述相同的操作(类似于Alien的响应):

mongoTemplate

最新的spring-data-mongo文档中的更多信息:https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mongo-template.query.distinct

答案 2 :(得分:0)

可能会晚一点,但我正在做同样的事情: 如果您的集合中仅包含一个String(数据类型)字段,而您只想获取此字段,则可以尝试:

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

值均值查询和字段类型是您想要获取/忽略的内容

在mongo数据库中,您可以通过此网站(https://docs.mongodb.com/manual/tutorial/project-fields-from-query-results/)进行检查

或Stackoverflow(Spring Data Mongo Query Field parameters)中的答案