Node.js 如何在Mongoose中使用aggregate with$lookup,并在子数组中使用外键?
我正在尝试在我的express mongo项目中加入3个表。 我有一张名为Product的表格,如下所示:Node.js 如何在Mongoose中使用aggregate with$lookup,并在子数组中使用外键?,node.js,mongodb,express,mongoose,lookup,Node.js,Mongodb,Express,Mongoose,Lookup,我正在尝试在我的express mongo项目中加入3个表。 我有一张名为Product的表格,如下所示: Product: _id:5f92a8dfad47ce1b66d4473b name:"Freno 1" createdFrom:5f648f7d642ed7082f5ff91f category:5f92a00c4637a61a397320a1 description:"Freni di tutti i tipi" sellingPrice:10
Product:
_id:5f92a8dfad47ce1b66d4473b
name:"Freno 1"
createdFrom:5f648f7d642ed7082f5ff91f
category:5f92a00c4637a61a397320a1
description:"Freni di tutti i tipi"
sellingPrice:1050
purchasePrice:350
我必须在求和后提取可用数量,然后从其他两个表中减去数量:purchaseorders
和salesforders
purchaseorders
_id:5f930c6c6817832c0d5acbb4
items:[
{
_id:5f930c6c6817832c0d5acbb5
product:5f92abaf17ec621c1da4f4f9
quantity:10
purchasingPrice:1500
discount:300
},
{
_id:5f930c6c6817832c0d5acbb6
product:5f92a8dfad47ce1b66d4473b
quantity:7
purchasingPrice:1500
discount:300
}]
Purchaseorders
和salesorders
设计为在同一订单中包含不同的产品。
我试图将这3个表组合起来,得到如下结果:
[
{_id: 5f92a8dfad47ce1b66d4473b,
name: "Freno 1",
quantity: 4 },
etc.. with all other products
]
let result = await Product.aggregate([
{
$lookup: {
from: "purchaseorders",
localField: "_id",
foreignField: "items.product",
as: "purchaseorders"
}
},
{
$lookup: {
from: "salesorders",
localField: "_id",
foreignField: "items.product",
as: "salesorders"
}
},
{
$unwind: "$purchaseorders"
},
{
$unwind: "$purchaseorders.items"
},
{
$unwind: "$salesorders"
},
{
$unwind: "$salesorders.items"
},
{
$group: {
_id: "$_id"
}
}
])
我想求purchaseorders
中的所有数量之和,然后减去salesforders
的数量之和
我尝试从产品表开始使用聚合,如下所示:
[
{_id: 5f92a8dfad47ce1b66d4473b,
name: "Freno 1",
quantity: 4 },
etc.. with all other products
]
let result = await Product.aggregate([
{
$lookup: {
from: "purchaseorders",
localField: "_id",
foreignField: "items.product",
as: "purchaseorders"
}
},
{
$lookup: {
from: "salesorders",
localField: "_id",
foreignField: "items.product",
as: "salesorders"
}
},
{
$unwind: "$purchaseorders"
},
{
$unwind: "$purchaseorders.items"
},
{
$unwind: "$salesorders"
},
{
$unwind: "$salesorders.items"
},
{
$group: {
_id: "$_id"
}
}
])
谢谢你帮助我 你可以试试
要添加$addFields
字段数量
迭代$reduce
采购订单的循环,$reduce迭代项目的循环,并获得匹配产品的数量和$add的初始值reduce
迭代销售订单的循环,$reduce迭代项目的循环,并获得匹配产品的数量和$add的初始值reduce$reduce
purchaseorders的数量与salesorders的数量$subtract
您好,谢谢您的回复。但是我需要一个唯一的对象数组作为结果,比如[{productId:xxx,quantity:xx},{productId:xxx,quantity:xx},…]是的。。问题是一个订单可能包含其他产品不,我不能,因为你的结果与我期望的不同哦,是的!!!非常感谢你!你能给我解释一下所有的步骤吗?你为什么不放松一下??