【问题标题】:How to combine results in a Mongo aggregation query如何在 Mongo 聚合查询中组合结果
【发布时间】:2020-06-27 18:58:59
【问题描述】:

我是 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 } ] } }

非常感谢

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:

    您可以通过_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" }
        }
      }
    ]);
    

    【讨论】:

    • 谢谢。那太棒了。给我这个作为输出 - { "_id": { "instr": "ABC-123", "counts": [ { "bu": "BU2", "count": 1 }, { "bu": "BU1 ", "计数": 1 } ] } }。这是否给了我一个包含两个对象的计数数组?我想遍历 counts 数组并打印“bu”值和“count”值。
    • 是的,就像您在问题中指定的输出一样。一切都在_id里面
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 2018-12-11
    相关资源
    最近更新 更多