我有这两个MongoDB集合:
// orders
{
_id: ObjectId("5a4bf27f9b3e644b242c6383"),
price: 1000
},
{
_id: ObjectId("6a4bf27f9b3e644b242c6384"),
price: 2000
},
{
_id: ObjectId("3a4bf27f9b3e644b242c6382"),
price: 3000
}
// routes
{
_id: ObjectId(""),
user:ObjectId(""),
tasks:[
{ order: ObjectId("5a4bf27f9b3e644b242c6383"), type="1" },
{ order: ObjectId("6a4bf27f9b3e644b242c6384"), type="2" },
{ order: ObjectId("3a4bf27f9b3e644b242c6382"), type="3" },
]
}
我需要匹配一个用户ID(processes.user),并通过它找到订单价格的总和(sum orders.Price)。
我尝试了几个查询,但没有接近我需要的结果:
{
user: ObjectId(""),
total: 6000
}
发布于 2018-07-25 10:12:51
你可以使用下面的聚合:
db.routes.aggregate([
{
$unwind: "$tasks"
},
{
$lookup: {
from: "orders",
localField: "tasks.order",
foreignField: "_id",
as: "order"
}
},
{
$unwind: "$order"
},
{
$group: {
_id: "$_id",
total: { $sum: "$order.price" }
}
}
])
你可以在使用$ lookup
与第二个集合“join”之前$unwind
你的任务,然后可以再次使用$unwind
将数组转换为单个文档。在最后一步中,使用$ group
并获得总价。
https://stackoverflow.com/questions/-100005712
复制相似问题