
MongoDB
MongoDB - 使用 $group 在 $lookup 之后倒回 $unwind 嵌套数组
在MongoDB中,我们经常需要处理嵌套数组数据。在某些情况下,我们需要对这些嵌套数组进行聚合操作,并将结果展开以便更好地进行分析。在本文中,我们将探讨如何使用MongoDB的聚合操作符 $group、$lookup 和 $unwind 来处理这种情况。背景介绍假设我们有两个集合:用户集合(users)和订单集合(orders)。每个用户都可以拥有多个订单,并且每个订单都包含多个商品。我们想要统计每个用户的订单总金额。方案首先,我们需要使用 $lookup 进行左连接操作,将用户集合和订单集合关联起来。这将创建一个新的字段,其中包含了每个用户的订单信息。下面是一个示例代码:Javascriptdb.users.aggregate([ { $lookup: { from: "orders", localField: "_id", foreignField: "user_id", as: "orders" } }])接下来,我们可以使用 $unwind 操作符展开嵌套数组字段。这样一来,每个订单将变成一个独立的文档。下面是一个示例代码:Javascriptdb.users.aggregate([ { $lookup: { from: "orders", localField: "_id", foreignField: "user_id", as: "orders" } }, { $unwind: "$orders" }])现在,我们可以使用 $group 操作符对用户进行分组,并计算每个用户的订单总金额。下面是一个示例代码:Javascriptdb.users.aggregate([ { $lookup: { from: "orders", localField: "_id", foreignField: "user_id", as: "orders" } }, { $unwind: "$orders" }, { $group: { _id: "$_id", TotalAmount: { $sum: "$orders.amount" } } }])案例代码假设我们有以下的用户集合和订单集合:用户集合(users):Javascript[ { "_id": 1, "name": "John" }, { "_id": 2, "name": "Alice" }]订单集合(orders):Javascript[ { "_id": 101, "user_id": 1, "amount": 50 }, { "_id": 102, "user_id": 1, "amount": 100 }, { "_id": 103, "user_id": 2, "amount": 75 }]我们可以使用以下代码实现上述方案:Javascriptdb.users.aggregate([ { $lookup: { from: "orders", localField: "_id", foreignField: "user_id", as: "orders" } }, { $unwind: "$orders" }, { $group: { _id: "$_id", TotalAmount: { $sum: "$orders.amount" } } }])运行以上代码将得到以下结果:Javascript[ { "_id": 1, "TotalAmount": 150 }, { "_id": 2, "TotalAmount": 75 }]在本文中,我们学习了如何使用MongoDB的聚合操作符 $group、$lookup 和 $unwind 来处理嵌套数组数据。通过将这些操作符结合使用,我们可以轻松地对嵌套数组进行聚合操作,并从中获取有用的信息。以上是关于MongoDB使用 $group 在 $lookup 之后倒回 $unwind 嵌套数组的文章。希望本文能帮助您理解并使用这些操作符来处理您的数据。Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号