Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring数据Mongo-查询方法和不同字段_Java_Spring_Mongodb_Spring Data - Fatal编程技术网

Java Spring数据Mongo-查询方法和不同字段

Java Spring数据Mongo-查询方法和不同字段,java,spring,mongodb,spring-data,Java,Spring,Mongodb,Spring Data,我目前正在使用SpringDataMongo进行一个项目。 我的存储库只是一个扩展MongoRepository的接口。我想添加一个自定义查询方法,以便为我的集合的一个字段检索所有不同的值 我试过这样的方法: @RepositoryRestResource(path = "devices", collectionResourceRel = "deviceInfos") public interface DeviceInfoRepository extends MongoRepository<

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

我试过这样的方法:

@RepositoryRestResource(path = "devices", collectionResourceRel = "deviceInfos")
public interface DeviceInfoRepository extends MongoRepository<DeviceInfo, String> {

    @RestResource(path = "distinctUnitIds")
    List<String> findDistinctUnitIdBy();

}
@RepositoryRestResource(path=“devices”,collectionResourceRel=“deviceinfo”)
公共接口设备信息存储库扩展了MongoRepository{
@RestResource(path=“distinctunitis”)
列出FindDistinctuitBy();
}
使用该代码,Spring会给我一个错误,因为它无法构建我的列表。所以我试了一下:

@RepositoryRestResource(path = "devices", collectionResourceRel = "deviceInfos")
public interface DeviceInfoRepository extends MongoRepository<DeviceInfo, String> {

    @RestResource(path = "distinctUnitIds")
    List<DeviceInfo> findDistinctUnitIdBy();

}
@RepositoryRestResource(path=“devices”,collectionResourceRel=“deviceinfo”)
公共接口设备信息存储库扩展了MongoRepository{
@RestResource(path=“distinctunitis”)
列出FindDistinctuitBy();
}
这段代码可以正常工作,但它的独特之处似乎被完全忽略了

关于Distinct in查询方法的文档确实不清楚

我做错什么了吗?使用Spring数据获取字段的不同值的最佳方法是什么


谢谢

您必须使用Spring数据
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());

以下是更多信息的链接:

在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;
distributetable iterable=mongoTemplate.getCollection(COLLECTION_NAME).distinct(“源”),在(FieldValue,query.getQueryObject(),String.class)中;
MongoCursor=iterable.iterator();
列表=新的ArrayList();
while(cursor.hasNext()){
list.add(cursor.next());
}
退货清单;

谢谢你的回答。我正期待着这样的回答。你知道《参考指南》中描述的FindDintintBy是做什么的吗?mongo存储库不支持关键字distinct,请检查此处支持的关键字我对你的回答不清楚。你能发布完整的解决方案吗?你能在此处提供指导吗?@PAA Both基本相同,除了上面的例子使用迭代器来支持可伸缩性-这是明智的。如果您还有任何问题,请告诉我