Получите отсортированные отдельные значения с помощью 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


person Andrew Nepogoda    schedule 20.02.2019    source источник
comment
Посмотри на это! › stackoverflow.com/questions/27476675/   -  person Alagarasan M    schedule 20.02.2019
comment
@AlaguMS Да, я видел. Для меня нет полезного ответа.   -  person Andrew Nepogoda    schedule 20.02.2019
comment
хорошо, вы все равно можете сортировать документ в java после его получения, если вы не хотите использовать агрегации.   -  person RichieK    schedule 21.02.2019
comment
@RichieK, я не знаю опечатки в поле .. Поэтому я не могу сортировать значения на стороне Java   -  person Andrew Nepogoda    schedule 21.02.2019


Ответы (2)


Основываясь на предыдущем ответе, я решил свою проблему с агрегацией 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());
}

Я надеюсь, что это будет полезно для кого-то.

person Andrew Nepogoda    schedule 21.02.2019
comment
У меня не работает Get (.map(item -> item.get(_id)). Его вообще не воспринимают как метод. - person ; 13.06.2020

С агрегацией Mongo вы можете

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