如何使用mongodb映射三个集合



我试图使用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并显示第一个值。

最新更新