MongoTemplate:匹配某个标准的文档的键值总和

Posted

技术标签:

【中文标题】MongoTemplate:匹配某个标准的文档的键值总和【英文标题】:MongoTemplate: sum values of keys for documents matching a certain criterion 【发布时间】:2016-01-28 04:31:24 【问题描述】:

我的以下 mongodb 查询按预期工作

db.importedDataItems.aggregate(
    $match: 
        mobile: "1234567890"
    
, 
    $group: 
        _id: 'mobile',
        calls:  $sum: '$calls' 
    
 )

但即使在引用thesequestions & tutorial 之后,它的等效 Java 代码...

Aggregation agg = Aggregation.newAggregation(Aggregation.match(Criteria.where("mobile").is("1234567890"),
    Aggregation.group("mobile").sum("calls").as("totalCalls"),
    Aggregation.project("totalCalls"));
AggregationResults<Doc> results = mongoTemplate.aggregate(agg, "yoCollection",
    Doc.class);
Doc doc = results.getMappedResults().get(0);

...返回一个空列表并抛出 IndexOutOfBoundsException 尽管我的查询在控制台上返回结果!

【问题讨论】:

【参考方案1】:

match() 参数缺少右括号:

import static org.springframework.data.mongodb.core.aggregation.Aggregation.*;

Aggregation agg = Aggregation.newAggregation(
        match(Criteria.where("mobile").is("1234567890")), // <-- missing closing parenthesis
        group("mobile").sum("calls").as("totalCalls"),
        project("totalCalls")
    );

AggregationResults<Doc> results = mongoTemplate.aggregate(agg, "yoCollection", Doc.class);
Doc doc = results.getMappedResults().get(0);

【讨论】:

重新格式化长链方法后,它可以工作了!谢谢,也许缺少右括号是问题所在,但我想知道为什么 eclipse 没有警告我:)

以上是关于MongoTemplate:匹配某个标准的文档的键值总和的主要内容,如果未能解决你的问题,请参考以下文章

如何使用spring MongoTemplate查询子文档,并按子文档的某个字段排序?

MongoTemplate 至少匹配我传递的值的查询数组

MongoDB查询以获取与具有多个值的键匹配的所有文档[重复]

Mongodb的 mongoTemplate 内嵌文档怎么进行查询?

MongoTemplate 一次更新多个文档而不使用 saveAll() 或循环

MongoDB Lifecycle 事件访问 MongoTemplate