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

如何在Mongo聚合查询中组合结果

琴俊人
2023-03-14

我不熟悉Mongo中的聚合查询,并且一直在努力产生我想要的输出。我有以下聚合查询:

db.events.aggregate([
  { $match: { requestState: "APPROVED" } },
  { $unwind: { path: "$payload.description" } },
  { $group: { _id: { instr: "$payload.description", bu: "$createdByUser", count: { $sum: 1 } } } }
]);

返回以下结果:

{ "_id" : { "instr" : "ABC-123", "bu" : "BU2", "count" : 1 } }
{ "_id" : { "instr" : "ABC-123", "bu" : "BU1", "count" : 1 } }
{ "_id" : { "instr" : "DEF-456", "bu" : "BU1", "count" : 1 } }

如何修改聚合查询,以便只返回2个文档而不是3个文档?将两个“ABC-123”结果合并为一个结果,并使用带有“bu”和“count”字段的新计数数组,即。

{ "_id" : { "instr" : "ABC-123", "counts": [ { "bu" : "BU1", "count" : 1 }, { "bu" : "BU2", "count" : 1 } ] } }

非常感谢

共有1个答案

邢项禹
2023-03-14

您可以通过\u id.instr将另一个阶段仅添加到$group,并将另一个阶段添加到所需的输出形状的$project

db.events.aggregate([
  {
    $match: { requestState: "APPROVED" }
  },
  {
    $unwind: { path: "$payload.description" }
  },
  {
    $group: {
      _id: { instr: "$payload.description", bu: "$createdByUser", count: { $sum: 1 } }
    }
  },
  {
    $group: {
      _id: { instr: "$_id.instr" },
      counts: { $push: { bu: "$_id.bu", count: "$_id.count" } }
    }
  },
  {
    $project: {
      _id: { instr: "$_id.instr", counts: "$counts" }
    }
  }
]);
 类似资料:
  • 问题内容: 这是我第一次在Java中使用Mongo,并且此聚合查询存在一些问题。我可以在Mongo for Spring中执行一些简单的查询,并在我的Repository接口中扩展注解。知道在Spring-Data中进行长时间聚合时采用哪种方法会很有帮助。 问题答案: 您可以实现AggregationOperation 并编写自定义聚合操作查询,然后用于执行您在mongo shell中执行的任何m

  • 这是我第一次在Java中使用Mongo,这个聚合查询有一些问题。我可以在我的存储库界面中使用注释在Mongo for Spring中进行一些简单的查询,这扩展了

  • 大家好,我有一个大问题在查询我的数据。我有这样的文件: 我想构建两个查询: 1)每天计算标签的数量,然后输出,例如,如下所示: 2)另一个是相同的,但我想设置一个期间从2016-12-13到2016-12-17。 对于第一个查询,我编写了这个查询,并得到了我所搜索的内容,但是在Spring Data Mongo中,我不知道如何编写。

  • 我有以下JPA实体(getter、setter和非相关字段省略): 我的目标是使用JPQL或criteriaAPI实现查询,它将返回每天的平均事务量和最大事务量。 产生预期结果的原生SQL查询(MySQL数据库)如下所示: 遗憾的是,不鼓励使用本机 SQL 查询,并且 JPQL 不允许在 where 子句中使用子查询。 提前谢谢你。 附加: 我从以下Spring数据查询开始: 但显然没有用: 我可

  • 我正在使用mongodb中的聚合查询来查找集合中存在的所有文档中的属性之和。 查询: Mongodb返回的结果很好,并且是这种格式。 我很困惑如何存储Mongodb返回的结果对象并从中提取特定字段。 请帮忙。

  • 在各种聚合管道阶段之后,我的第一个查询返回以下结果: 在各种聚合管道阶段之后,我的第二个查询返回以下结果: 这两个查询都在同一个集合上执行,但是根据管道阶段对数据进行不同的分组和转换。 我的两个查询都使用不同的条件,具有不同的管道阶段,包括和