从 spring 数据 mongo 查询 return 单个字段

query to return single field from spring data mongo

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

下面的代码用于从车辆获取所有 imei 号码 table(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 中的查询是什么。

(我的要求是 select 来自设备的所有唯一不同的 imei 字段,并且只有一个字段 selection 像 VehicleRepo)

我尝试了多种组合,但 none 奏效了。

我找不到任何使用@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());
}

您还可以在自定义存储库方法中使用 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

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

    @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/)

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