我的应用程序中有多个数据源(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”之类的单个字段)
我尝试了多种组合,但没有奏效。
答案 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)中的答案