当前位置: 首页 > 知识库问答 >
问题:

如何在spring MongoTemplate中存储mongodb聚合查询结果?

康照
2023-03-14

我正在使用mongodb中的聚合查询来查找集合中存在的所有文档中的属性之和。

查询:

db.conversation.aggregate(   [
{
    $match:{
        $and:[{"mailBoxId":"1","isHidden":false}]
        }
},
 {
   $group:
     {
       _id: {"mailBoxId":"$mailBoxId","isHidden":"$isHidden"} ,
       messageCount: { $sum:"$messageCount" }
     }
 }
]);

Mongodb返回的结果很好,并且是这种格式。

{
"result" : [
    {
        "_id" : {
            "mailBoxId" : "2",
            "isHidden" : false
        },
        "messageCount" : 2
    }
],
"ok" : 1
}
Query retrievalQuery = new Query();
    retrievalQuery.addCriteria(Criteria.where("mailBoxId").is(userId).and("isHidden").is(false));
    return mongoTemplate.find(retrievalQuery, );

我很困惑如何存储Mongodb返回的结果对象并从中提取特定字段。

请帮忙。

共有1个答案

孟智志
2023-03-14

您试图在mongoTemplate中使用聚合的方式是错误的。试试这个我相信它会有帮助的。

Aggregation agg = Aggregation.newAggregation(
        Aggregation.match(
                Criteria.where("mailBoxId").is("1").and("isHidden").is(false)),
        Aggregation.group("$mailBoxId").sum("$unReadMessagesCount").as("unReadMessagesCount")
    );


System.out.println("Query  ==>>["+agg.toString()+"]");
AggregationResults<AggResultObj> data = mongoTemplate.aggregate(agg, "collectionName", AggResultObj.class);

System.out.println("UnReadMesasgeCode :"+data.getUniqueMappedResult().getUnReadMessagesCount());

AggResultObj将看起来像

public class AggResultObj{
    String _id;
    int unReadMessagesCount;

    public String get_id() {
        return _id;
    }
    public void set_id(String _id) {
        this._id = _id;
    }
    public int getUnReadMessagesCount() {
        return unReadMessagesCount;
    }
    public void setUnReadMessagesCount(int unReadMessagesCount) {
        this.unReadMessagesCount = unReadMessagesCount;
    }
}
 类似资料:
  • 我使用Nodejs和MongoDB与expressjs和mongoose库,创建一个具有用户、文章和评论模式的博客API。下面是我使用的模式。

  • 主要内容:aggregate() 方法,管道MongoDB 中的聚合操作用来处理数据并返回计算结果,聚合操作可以将多个文档中的值组合在一起,并可对数据执行各种操作,以返回单个结果,有点类似于 SQL 语句中的 count(*)、group by 等。 aggregate() 方法 您可以使用 MongoDB 中的 aggregate() 方法来执行聚合操作,其语法格式如下: db.collection_name.aggregate(aggr

  • 我不熟悉Mongo中的聚合查询,并且一直在努力产生我想要的输出。我有以下聚合查询: 返回以下结果: 如何修改聚合查询,以便只返回2个文档而不是3个文档?将两个“ABC-123”结果合并为一个结果,并使用带有“bu”和“count”字段的新计数数组,即。 非常感谢

  • 我是Spring Data MongoDB的新手,我正在尝试用Spring Data MongoDBJava实现聚合查询。我尝试过从这个问题中搜索,并使用进行搜索,但仍然没有结果。 我的数据格式: 我的查询: 这是我在Javascript后端使用的查询,我可以用Mongoose很容易地做到这一点。然而,我对它的Java实现有一些困难。 当我尝试运行此程序时,会出现以下错误: 当我删除从组聚合中,我

  • 问题内容: 我正在尝试使用内部,而不返回匹配的文件。 谁能告诉我哪里出了问题或正确的语法? 我什至尝试更换 问题答案: 就像您链接到的文档中所说的那样,执行此操作的两种方法是: 要么 但是我也尝试了您的第二次尝试,并且效果很好。 顺便说一句,在这种情况下,正则表达式选项没有意义,因为无论如何您只需要一个匹配项。请注意,它甚至没有在文档中列出。

  • 假设我有一个MongoDB集合,其中包含以下信息: 我想计算按州分组的订单总价的总和,其中项目为“苹果”,颜色为“红色”。我的问题是: 但是,我希望能够将我的结果cust\u id包含在\u id中,它是一个数组/映射/一些结构,其中包含构成我的合计的所有客户id的列表。因此,我希望我的输出包含 是否有办法处理此mongo聚合/查询?或者是一种更好的方式来构造此查询,以便我可以按州分组计算红苹果的