首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多字段$lookup

多字段$lookup
EN

Stack Overflow用户
提问于 2019-02-12 06:31:52
回答 1查看 785关注 0票数 2

我有两个集合,并试图在两个不同的条件下得到总金额的总和。

我的密码是:

代码语言:javascript
复制
db.drivers.aggregate([
  {
    $lookup: {
      from: "bookings",
      let: { driver_id: "$_id" },
      pipeline: [
        { $match: { $expr: { $eq: ["$driverId", "$$driver_id"] } } },
        {
          $group: {
            _id: "$driverId",
            totalAmount: { $sum: "$driverAmount" }
          }
        }
      ],
      as: "bookingdata",
      pipeline: [
        {
          $match: {
            $expr: {
              $and: [
                { $eq: ["$driverId", "$$driver_id"] },
                { $eq: ["$payment.settled", false] }
              ]
            }
          }
        },
        {
          $group: {
            _id: "$driverId",
            totaldues: { $sum: "$driverAmount" }
          },
          bookingdata: {
            $push: "$totaldues"
          }
        },
        { $project: { _id: 0, totalAmount: 1, totaldues: 1 } }
      ]
    }
  }
]);

其结果是总额或应付总额,但不是两者兼而有之。如何获得司机的详细资料以及总金额和总费用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-12 06:39:41

不能像在这里使用pipeline一样多次在同一个对象中使用同一个字段。

相反,可以在$facet内部使用$lookup聚合一次处理多个管道。

代码语言:javascript
复制
db.drivers.aggregate([
  { "$lookup": {
    "from": "bookings",
    "let": { "driver_id": "$_id" },
    "pipeline": [
      { "$facet": {
        "totaldues": [
          { "$match": {
            "$expr": {
              "$and": [
                { "$eq": ["$driverId", "$$driver_id"] },
                { "$eq": ["$payment.settled", false] }
              ]
            }
          }},
          { "$group": {
            "_id": "$driverId",
            "totaldues": { "$sum": "$driverAmount" },
            "bookingdata": { "$push": "$totaldues" }
          }},
          { "$project": { "_id": 0, "totalAmount": 1, "totaldues": 1 } }
        ],
        "totalAmount": [
          { "$match": { "$expr": { "$eq": ["$driverId", "$$driver_id"] } }},
          { "$group": {
            "_id": "$driverId",
            "totalAmount": { "$sum": "$driverAmount" }
          }}
        ]
      }}
    ],
    "as": "bookingdata"
  }}
])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54644079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档