Spring Data Mongo-Query方法和Distinct字段



我目前正在使用SpringDataMongo进行一个项目。我的存储库只是一个扩展MongoRepository的接口。我想添加一个自定义查询方法,以便检索集合的某个字段的所有不同值。

我试过这样的东西:

@RepositoryRestResource(path = "devices", collectionResourceRel = "deviceInfos")
public interface DeviceInfoRepository extends MongoRepository<DeviceInfo, String> {
    @RestResource(path = "distinctUnitIds")
    List<String> findDistinctUnitIdBy();
}

有了这些代码,Spring给了我一个错误,因为它无法构建我的列表。所以我尝试了这个:

@RepositoryRestResource(path = "devices", collectionResourceRel = "deviceInfos")
public interface DeviceInfoRepository extends MongoRepository<DeviceInfo, String> {
    @RestResource(path = "distinctUnitIds")
    List<DeviceInfo> findDistinctUnitIdBy();
}

该代码有效,但区别似乎被完全忽略了。

查询方法中有关Distinct的文档确实不清楚。。。

我做错什么了吗?使用Spring Data获得字段的不同值的最佳解决方法是什么?

谢谢!

您必须使用Spring Data MongoTemplate-MongoRepository接口仅用于基本功能,为了更精细地控制查询内容,最好使用MongoTemplate

以下是如何从集合中获得不同值的示例:

Criteria criteria = new Criteria();
criteria.where("dataset").is("d1");
Query query = new Query();
query.addCriteria(criteria);
List list = mongoTemplate.getCollection("collectionName")
    .distinct("source",query.getQueryObject());

以下是更多信息的链接:mongodb mongoTemplate获取带有一些条件的distinct字段

在SpringBoot2中,您可以执行以下操作:

DistinctIterable<String> iterable = mongoTemplate.getCollection(COLLECTION_NAME).distinct("source",in(FieldValue,query.getQueryObject(), String.class);
        MongoCursor<String> cursor = iterable.iterator();
        List<String> list = new ArrayList<>();
        while (cursor.hasNext()) {
            list.add(cursor.next());
        }
        return list;

最新更新