代码之家  ›  专栏  ›  技术社区  ›  codemonkey

如何使用聚合来统计文档并汇总特定字段?

  •  0
  • codemonkey  · 技术社区  · 4 年前

    我试图统计与列表ID匹配的潜在客户数量,并将其与成本相结合。这是我的收藏:

    [
      {
        "list_id": "5f76a53e8a93be772c14cc06",
        "fname": "John",
        "lname": "Doe",
        "cost": 0
      },
      {
        "list_id": "5f76a53e8a93be772c14cc06",
        "fname": "John",
        "lname": "Wayne",
        "cost": 0.65
      },
      {
        "list_id": "5f76a53e8a93be772c14cc06",
        "fname": "John",
        "lname": "Kelly",
        "cost": 1
      },
      {
        "list_id": "5f76a53e8a93be772c14cc06",
        "fname": "John",
        "lname": "Morrie",
        "cost": 0.40
      }
    ]
    

    我试图得到这个结果:

    [
      {
        "_id": null,
        "lead_count": 4
        "total_cost": 2.05
      }
    ]
    

    我的聚合看起来像这样:

    db.collection.aggregate([
      {
        "$match": {
          list_id: "5f76a53e8a93be772c14cc06"
        }
      },
      {
        "$group": {
          _id: null,
          total_cost: {
            $sum: "$cost"
          }
        }
      }
    ])
    

    但它只给了我:

    [
      {
        "_id": null,
        "total_cost": 2.05
      }
    ]
    

    我需要如何调整它才能得到我想要的东西?以下是Playground链接: https://mongoplayground.net/p/zvLY67Oa_Ps

    0 回复  |  直到 4 年前
        1
  •  0
  •   J.F.    4 年前

    您需要指定要添加的新字段,即。 lead_count .

    只需要多一个对象: "lead_count": { "$sum": 1 }, 进入之内 $group 舞台。

    舞台将是这样的:

    "$group": {
      "_id": null,
      "lead_count": {
        "$sum": 1
      },
      "total_cost": {
        "$sum": "$cost"
      }
    }
    

    请注意,通过这种方式,您可以创建新字段并使用 $sum : 1 为每个值增加一个值。
    这意味着:您正在创建字段 铅计数 您可以在其中存储与第一阶段匹配的文档的计数。

    查询示例 here