Mongotemplate聚合 - 获得结果数

时间:2016-01-04 11:25:51

标签: java spring mongodb mongodb-query mongotemplate

我想使用mongotemplate获取聚合的结果总数。

澄清 - 对于我们可以使用的查询:mongoTemplate.count(query, collectionName),它可以在不考虑限制/跳过的情况下获得结果数。

然而,我无法找到类似于mongotemplate聚合的东西...... 总结果是必需的,因为我们使用分页,并且需要知道没有限制/跳过的总数。

编辑:例如,如果我有以下带有10个文档的集合A:

{ field1:..., field2:..., },...

我可以使用mongotemplate创建一个查询来获取文档:

Query query = new Query();
query.limit(5);
List<?> queryResults = this.mongoTemplate.find(query, A.class , "A") // will return only 5 results
long count = this.mongoTemplate.count(query, collectionName); // will return 10, because that's the total number result

现在,如果我有一个聚合而不是查询:

    List<AggregationOperation> aggregationOperations = new ArrayList<AggregationOperation>();

    aggregationOperations.add(Aggregation.match(...));
    aggregationOperations.add(Aggregation.group(...));
    aggregationOperations.add(Aggregation.limit(someLimit));

    AggregationResults<?> aggregationResults = 
    this.mongoTemplate.aggregate(
                            Aggregation.newAggregation(aggregationOperations), "A", 
AggregationResults.class);

我想要一些方法来获得聚合中的结果总数 - 类似于&#34; count&#34;对于查询。

1 个答案:

答案 0 :(得分:1)

您可以这样做

operations.add(Aggregation.group().count().as("count"));

Document rawResults = getMongoTemplate().aggregate(
            Aggregation.newAggregation(operations),
            collectionName,
            entityClass)
         .getRawResults();

    List<Map<String, Object>> results = (List<Map<String, Object>>) rawResults.get("results");

    if (CollectionUtils.isNotEmpty(results)
        && results.get(0) != null 
        && results.get(0).containsKey("count")) {
        Integer count = (Integer) results.get(0).get("count");
        return count.longValue();
    }
    return 0;

}