查询以从 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 findDistinctImei(String imei); ? 如果你看到 SELECT imei FROM vehicle 我没有通过任何东西......所以我的要求也是一样的......我想获得所有不同的 imei。 检查这个:***.com/q/19203724/4373948 你可以使用类似@Query(value = "SELECT imei FROM vehicle", fileds:"'fieldName':1") 【参考方案1】:

可能有点晚了,但我正在做同样的事情: 如果您的集合中只有一个字符串(数据类型)字段,并且您只想获取此字段,您可以尝试:

    @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 查询

spring-data-mongo - 可选查询参数?

使用 mongoTemplate 在 spring-data-mongo Java 中进行 Mongo 聚合查询

如何使用 mongo 搜索集合并返回子文档列表(Spring-data-mongo)

将 $facet mongo 查询转换为 Spring Data

为啥我的聚合返回重复数据?