我试图使用mongodb映射三个集合。我完成了两个集合,但另一个集合我无法映射如何实现它,任何一个给出示例代码。
group_promotion
[{
"id":1,
"group_name":"latest",
products:[6,7,8]
}]
产品
[{
"id":6,
"produc_namme":"bourbon",
"category_id": 20
}]
类别
[{
"id":20,
"category_name":"beer"
}]
映射代码
db.group_promoton.aggregate([{$lookup :
{
from:"product",
localfield:"products",
foreignField:'id',
as:products
}}])
我得到了输出
[{
"id":1,
"group_name":"latest",
products:[{
"id":6,
"produc_namme":"bourbon",
"category_id": 20
}]
}]
例外输出
[{
"id":1,
"group_name":"latest",
products:[{
"id":6,
"produc_namme":"bourbon",
"category_nmae":"beer"
}]
}]
在这里尝试以下查询:
db.getCollection("group_promotion").aggregate([
{
$lookup: {
from: "product",
localField: "products",
foreignField: "id",
as: "products"
}
},
{ $unwind: "$products" },
{
$lookup: {
from: "Category",
localField: "products.category_id",
foreignField: "id",
as: "category"
}
},
{ $unwind: "$category" },
{
$group: {
_id: '$id', "group_name": { $first: "$group_name" }, "products": {
$push: {
"id": "$products.id", "produc_namme": "$products.produc_namme", "category_nmae": "$category.category_name"
}
}
}
}
])
注意:
- 您始终可以在数组的
dotted
属性上使用$lookup
(如上述Category
集合查询中所述(。 - 在这里,我使用 $unwind 来解构数组(即产品和类别(,然后将它们分组以创建结果。我已使用 $first 来满足累加器策略$group并显示第一个值。