查询以从 Spring Data mongo 返回单个字段
Posted
技术标签:
【中文标题】查询以从 Spring Data mongo 返回单个字段【英文标题】:query to return single field from spring data mongo 【发布时间】:2019-05-13 17:05:26 【问题描述】:我的应用程序中有多个数据源(mysql 和 mongodb),我分别使用 JpaRepository(spring data jpa)和 MongoRepository(spring data mongo)。
以下代码用于从车辆表(mysql)中获取所有imei号码
@Repository
public interface VehicleRepo extends JpaRepository<Vehicle, Long>
@Query(value = "SELECT imei FROM vehicle", nativeQuery = true)
public List<Object[]> findImei();
我有另一个像下面这样的 mongo repo。
@Repository
public interface DeviceRepo extends MongoRepository<Device, String>
// looking for a method which returns all the distinct imei
我想知道 mongodb 中的查询是什么。
(我的要求是从设备中选择所有唯一不同的imei字段,并且只选择像VehicleRepo这样的单个字段)
我尝试了多种组合,但都没有奏效。
【问题讨论】:
有些人认为@Query("'yourdbfieldname':?0") List可能有点晚了,但我正在做同样的事情: 如果您的集合中只有一个字符串(数据类型)字段,并且您只想获取此字段,您可以尝试:
@Query(value = " 'groupId' : ?0 ", fields = " '_id': 0, 'user.$id':1 ")
List<String> findAllUserIdByGroupId(String groupId);
值意味着查询和字段类型是你想要得到/忽略的
在 mongo db 中,您可以查看此站点 (https://docs.mongodb.com/manual/tutorial/project-fields-from-query-results/)
或 *** 中的答案 (Spring Data Mongo Query Field parameters)
【讨论】:
【参考方案2】:您还可以在自定义存储库方法中使用mongoTemplate
来实现上述相同的事情(类似于 Alien 的)响应:
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
【讨论】:
【参考方案3】:我找不到任何使用 @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());
【讨论】:
以上是关于查询以从 Spring Data mongo 返回单个字段的主要内容,如果未能解决你的问题,请参考以下文章
将 mongo 查询转换为 spring-data-mongo 查询
使用 mongoTemplate 在 spring-data-mongo Java 中进行 Mongo 聚合查询
如何使用 mongo 搜索集合并返回子文档列表(Spring-data-mongo)