【问题标题】:Get sorted distinct values with MongoTemplate使用 MongoTemplate 获取排序的不同值
【发布时间】:2019-02-20 16:55:34
【问题描述】:

我正在尝试获取已排序的不同字段的列表:

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

【问题讨论】:

  • @AlaguMS 是的,我看到了。没有对我有用的答案。
  • 如果您不想使用聚合,您仍然可以在检索文档后在 java 中对文档进行排序。
  • @RichieK,我不知道字段的拼写错误。所以我无法在 java 端对值进行排序

标签: java mongodb spring-data-mongodb mongotemplate


【解决方案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());
}

我希望它对某人有所帮助。

【讨论】:

  • Get 对我不起作用 (.map(item -> item.get("_id"))。它根本没有被当作一种方法。
【解决方案2】:

使用 Mongo 聚合,您可以

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

【讨论】:

    猜你喜欢
    • 2011-06-13
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    相关资源
    最近更新 更多