不能在同一对象中多次使用同一字段
pipeline
在这里。
代替使用
$facet
内部聚合
$lookup
一次处理多条管道。
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"
}}
])