使用 MongoTemplate 获取排序的不同值
Get sorted distinct values with MongoTemplate
我正在尝试获取已排序的不同字段的列表:
public List<Object> getDistinctValues(String collection, String fieldName) {
Query query = new Query();
query.with(new Sort(Sort.Direction.ASC, fieldName));
return mongoTemplate.findDistinct(query, fieldName, collection, Object.class);
}
但未应用排序。
有没有办法用 mongoTemplate 来做?
spring-boot-starter-data-mongodb: 2.1.2.RELEASE
通过 Mongo 聚合,您可以
db.getCollection('assignments').aggregate([
{$group: {_id: "$fieldname"}},
{$sort : {"_id" :1}}
])
根据之前的回答,我用 Mongo 聚合解决了我的问题:
@Override
public List<Object> getDistinctValues(String collection, String fieldName, Sort.Direction sort) {
Aggregation agg = Aggregation.newAggregation(
Aggregation.group(fieldName),
Aggregation.sort(sort, "_id")
);
return mongoTemplate.aggregate(agg, collection, Document.class)
.getMappedResults()
.stream()
.map(item -> item.get("_id"))
.collect(Collectors.toList());
}
希望对大家有所帮助。
我正在尝试获取已排序的不同字段的列表:
public List<Object> getDistinctValues(String collection, String fieldName) {
Query query = new Query();
query.with(new Sort(Sort.Direction.ASC, fieldName));
return mongoTemplate.findDistinct(query, fieldName, collection, Object.class);
}
但未应用排序。 有没有办法用 mongoTemplate 来做?
spring-boot-starter-data-mongodb: 2.1.2.RELEASE
通过 Mongo 聚合,您可以
db.getCollection('assignments').aggregate([
{$group: {_id: "$fieldname"}},
{$sort : {"_id" :1}}
])
根据之前的回答,我用 Mongo 聚合解决了我的问题:
@Override
public List<Object> getDistinctValues(String collection, String fieldName, Sort.Direction sort) {
Aggregation agg = Aggregation.newAggregation(
Aggregation.group(fieldName),
Aggregation.sort(sort, "_id")
);
return mongoTemplate.aggregate(agg, collection, Document.class)
.getMappedResults()
.stream()
.map(item -> item.get("_id"))
.collect(Collectors.toList());
}
希望对大家有所帮助。