【问题标题】:MongoDB: $sum after $lookup arrayMongoDB:$lookup 数组后的 $sum
【发布时间】:2019-04-15 12:52:23
【问题描述】:

我有这个查询并且我正在使用$lookup,之后我想在查找提供的数组中对value 求和。

我的查询(我正在使用猫鼬):

  User.aggregate([{
      $match: {
        storeKey: req.body.store,
      }
    },
    {
      $group: {
        _id: {
          id: "$_id",
          name: "$name",
          cpf: "$cpf",      
          phone: "$phone",
          email: "$email",
          birthday: "$birthday"      
        },
        totalServices: {
          $sum: "$services"
        }
      }
    },
    {
      $lookup: {
        from: "schedules",
        localField: "_id.phone",
        foreignField: "customer.phone",
        as: "user_detail"
      }  
    },
    { $project: { "user_detail.value": 1 } },
  ])

我的查询结果(样本集合):

{
        "_id": {
            "id": "5bd89899bda5c343749d00f0",
            "name": "marcio",
            "cpf": null,
            "phone": "11999999999",
            "email": "marcio@gmail.com",
            "birthday": "2018-10-30T17:44:57.834Z"
        },
        "user_detail": [
            {
                "value": 50
            },
            {
                "value": 50
            },
            {
                "value": 40
            },
            {
                "value": 20
            },
            {
                "value": 20
            },
            {
                "value": 50
            },
            {
                "value": 18
            },
            {
                "value": 20
            },
            {
                "value": 20
            },
            {
                "value": 10
            },
            {
                "value": 120
            },
            {
                "value": 50
            },
            {
                "value": 120
            },
            {
                "value": 20
            },
            {
                "value": 20
            },
            {
                "value": 25
            },
            {
                "value": 20
            },
            {
                "value": 20
            },
            {
                "value": 20
            },
            {
                "value": 10
            },
            {
                "value": 20
            },
            {
                "value": 20
            },
            {
                "value": 35
            },
            {
                "value": 20
            },
            {
                "value": 20
            }
        ]
    }

我怎样才能对value 的所有字段求和,并用我的第一个 $group 的结果显示这个求和的结果?

【问题讨论】:

    标签: node.js mongodb mongoose mongodb-query aggregation-framework


    【解决方案1】:

    您可以将$sum 聚合与数组值一起使用

    db.user.aggregate([
      // $group stage
      { "$lookup": {
        "from": "schedule",
        "localField": "_id.phone",
        "foreignField": "customer.phone",
        "as": "user_detail"
      }},
      { "$project": {
        "total": { "$sum": "$user_detail.value" }
      }}
    ])
    

    【讨论】:

      【解决方案2】:

      您可以在$lookup 聚合中使用pipeline

      db.user.aggregate([{
            $match: {
              storeKey: req.body.store,
            }
          },
          {
            $lookup: {
              from: "schedules",
              as: "user_detail",
              let: {user_detail: "$phone"}
              pipeline: [
                {
                 // you could use a match on the second collection for example:
                  country: 'FR'
                },
                {
                  $group:{
                    _id: null,
                    count: {
                      $sum: "$value"
                    }
                  }
                },
                // More stages to add
              ]
            }  
          },
          // More stages to add
        ])
      

      【讨论】:

        猜你喜欢
        • 2021-06-10
        • 1970-01-01
        • 2018-07-26
        • 2018-08-27
        • 2019-04-15
        • 2018-08-16
        • 2021-03-10
        相关资源
        最近更新 更多