使用MongoTemplate获取排序的不同值

时间:2019-02-20 16:55:34

标签: java mongodb spring-data-mongodb 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

2 个答案:

答案 0 :(得分:2)

有了Mongo Aggregation,您可以

db.getCollection('assignments').aggregate([
    {$group: {_id: "$fieldname"}},
    {$sort : {"_id" :1}}
    ])

答案 1 :(得分:1)

基于先前的答案,我解决了Mongo Aggregation的问题:

@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());
}

我希望这对某人有帮助。