我在sql中有此查询
select * from SupplyItem si
inner join categories c on si.categories = c._id
inner join suppliers s on si.supplier = s._id
inner join products p on p.supplier = s._id
我在mongodb中需要此查询
我被困在
内部连接产品p在p.supplier = s._id
我当前的查询是
SupplyItem.aggregate([{
$lookup: {
from: 'categories',
localField: 'categories',
foreignField: '_id',
as: 'categoriess'
}
},
{
$lookup: {
from: 'suppliers',
localField: 'supplier',
foreignField: '_id',
as: 'suppliers'
},
},
])
我需要根据供应商对产品收款进行计数
答案 0 :(得分:0)
您可以尝试
db.supplyitem.aggregate([
//categories are not required to get count of products by supplier
// {$lookup:{from:'categories',localField:'categories',foreignField:'_id',as:'categories'},
// {$unwind:'$categories'},
{$lookup:{from:'suppliers',localField:'supplier',foreignField:'_id',as:'suppliers'}},
{$unwind:'$suppliers'},
{$lookup:{from:'products',localField:'_id',foreignField:'supplier',as:'products'}},
{$unwind:'$products'},
//to get count of products
{$group:{_id:'$suppliers._id',docs:{$addToSet:'$products'}}},
{$unwind:'$_id'},
{$project:{_id:0,supplier:'$_id',productsCount:{$size:'$products'}}}
])
//end result: you will get the supplier id & products count.
//if you need the supplier name as well (assuming the field is 'name'), you can change the $group as follows
{$group:{_id:{supplier_id:'$suppliers._id',supplier_name:'$suppliers.name'},docs:{$addToSet:'$products'}}},
{$unwind:'$_id'},
{$project:{_id:0,supplier_id:'$_id.supplier_id',supplier_name:'$_id.supplier_name',productsCount:{$size:'$products'}}}