mongodb嵌套数组元素$lookup
我有两个系列,mongodb嵌套数组元素$lookup,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有两个系列,订单和产品。我喜欢将所有的order.items[]加入到products集合中,以向items[] 样本数据: 订单 [{u id:1,项目:[ {产品编号:1,价格:1.99,数量:2}, {产品编号:2,价格:3.99,数量:5}]] 产品 [{{u id:1,名称:“产品1},{{u id:2,名称:“产品2}] 预期输出: [{u id:1,项目:[ {产品id:1,名称:“产品1”,价格:1.99,数量:2}, {产品编号:2,名称:“产品2”,价格:3.99,数量
订单
和产品
。我喜欢将所有的order.items[]
加入到products
集合中,以向items[]
样本数据:订单
[{u id:1,项目:[
{产品编号:1,价格:1.99,数量:2},
{产品编号:2,价格:3.99,数量:5}]]
产品
[{{u id:1,名称:“产品1},{{u id:2,名称:“产品2}]
预期输出:[{u id:1,项目:[
{产品id:1,名称:“产品1”,价格:1.99,数量:2},
{产品编号:2,名称:“产品2”,价格:3.99,数量:5}]}]
我尝试过使用$lookup和pipeline(mongodb 3.6),但没有获得名称值,甚至匹配也不起作用
感谢您的帮助!如果我没有使用v3.6,很抱歉,此查询将帮助您
db.orders.aggregate([
{
$unwind: "$items"
},
{
$lookup:
{
from: "products",
localField: "items.product_id",
foreignField: "_id",
as: "tproduct"
}
},
{
$project:
{
"_id" : 1,
"items.product_id" : 1,
"items.name" : { $arrayElemAt: ["$tproduct.name", 0] },
"items.price" : 1,
"items.qty" : 1
}
},
{
$group :
{
_id : "$_id",
items: { $push: "$items" }
}
}
])
我将解释四个阶段: