在Mongo聚合中,可以使用$lookup和$unwind操作符来按来自不同集合的相同值对数组进行分组。
首先,使用$lookup操作符将需要关联的集合连接起来。$lookup操作符可以在聚合管道中创建一个新的字段,将关联集合中的匹配文档添加到原始文档中。例如,假设我们有两个集合:orders和customers,orders集合中有一个字段customerId,表示订单所属的客户,customers集合中有一个字段_id,表示客户的唯一标识。我们可以使用$lookup操作符将这两个集合连接起来:
db.orders.aggregate([
{
$lookup: {
from: "customers",
localField: "customerId",
foreignField: "_id",
as: "customer"
}
}
])
上述聚合操作将在orders集合中创建一个新的字段customer,其中包含与customerId匹配的customers集合中的文档。
接下来,使用$unwind操作符展开数组字段。如果需要按照数组中的某个字段进行分组,需要先将数组展开为多个文档,然后再进行分组操作。例如,假设我们有一个字段items,表示订单中的商品列表,每个商品有一个字段category,表示商品的类别。我们可以使用$unwind操作符展开items字段:
db.orders.aggregate([
{
$unwind: "$items"
}
])
上述聚合操作将将每个订单中的商品展开为多个文档。
最后,使用$group操作符按照需要的字段进行分组。在$group操作符中,可以使用$sum、$avg、$push等操作符对分组后的文档进行聚合计算。例如,假设我们想按照商品类别对订单进行分组,并计算每个类别的订单数量:
db.orders.aggregate([
{
$unwind: "$items"
},
{
$group: {
_id: "$items.category",
count: { $sum: 1 }
}
}
])
上述聚合操作将按照商品类别对订单进行分组,并计算每个类别的订单数量,结果将包含_id字段表示商品类别,count字段表示订单数量。
推荐的腾讯云相关产品:腾讯云数据库MongoDB,详情请参考:https://cloud.tencent.com/product/cmongodb
领取专属 10元无门槛券
手把手带您无忧上云