我目前正在使用Spring Data Mongo开发一个项目。 我的存储库只是一个扩展MongoRepository的接口。我想添加一个自定义查询方法,以便检索我的某个集合字段的所有不同值。
我试过这样的事情:
false
使用该代码,Spring会给我一个错误,因为它无法构建我的列表。所以我尝试了这个:
@RepositoryRestResource(path = "devices", collectionResourceRel = "deviceInfos")
public interface DeviceInfoRepository extends MongoRepository<DeviceInfo, String> {
@RestResource(path = "distinctUnitIds")
List<String> findDistinctUnitIdBy();
}
该代码有效,但似乎完全忽略了。
关于查询方法中的Distinct的文档真的不太清楚......
我做错了什么吗?什么是最好的解决方法,使用Spring Data获取字段的不同值?
谢谢!
答案 0 :(得分:5)
您必须使用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 get distinct field with some criteria
答案 1 :(得分:0)
在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;