从spring data mongo返回单个字段的查询

s71maibg  于 2021-06-17  发布在  Mysql
关注(0)|答案(3)|浏览(388)

我的应用程序中有多个数据源(mysql和mongodb),我分别使用jparepository(springdatajpa)和mongorepository(springdatamongo)。
下面的代码用于从vehicle表(mysql)获取所有imei编号

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

我有另一个蒙哥回购如下。

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

我想知道mongodb中的查询是什么。
(我的要求是从设备中选择所有唯一不同的imei字段,并且只选择单个字段,如vehiclerepo)
我试过多种组合,但都不管用。

f45qwnt8

f45qwnt81#

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

zbsbpyhn2#

可能有点晚了,但我正在做同样的事情:如果您的集合中只有一个string(datatype)字段,并且您只想获取该字段,那么可以尝试:

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

值mean查询和字段类型是您要获取/忽略的内容
在mongo db中,您可以查看此网站(https://docs.mongodb.com/manual/tutorial/project-fields-from-query-results/)
或stackoverflow中的答案(spring data mongo query字段参数)

yk9xbfzb

yk9xbfzb3#

您也可以使用 mongoTemplate 在自定义存储库方法中,实现上述相同的响应(类似于alien的响应):

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

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

相关问题