MongoDB:获取引用架构中的文档计数
我有3个系列MongoDB:获取引用架构中的文档计数,mongodb,mongoose,aggregation-framework,Mongodb,Mongoose,Aggregation Framework,我有3个系列类别,子类别和产品 参考资料 category\u id在子类别中引用 products 我怎样才能得到 每个类别中产品的数量 每个类别中子类别的数量 每个子类别中产品的数量 -当我查询类别时,我应该在其中获得类别名称和产品计数。 -当我查询子类别时,我应该在其中获得子类别名称和产品计数。 模式示例: //类别 [ { _id:“5f886eb2d41da75dd5a90bfc” catName:“catName 1” }, { _id:“5f886eb2d41da75dd5a90b
类别
,子类别
和产品
参考资料
category\u id
在子类别中引用
products
类别中产品的数量
类别中子类别的数量
子类别中产品的数量
类别名称
和产品计数
。
-当我查询子类别时,我应该在其中获得子类别名称
和产品计数
。
模式示例:
//类别
[
{
_id:“5f886eb2d41da75dd5a90bfc”
catName:“catName 1”
},
{
_id:“5f886eb2d41da75dd5a90bfd”
猫名:“猫名2”
}
]
//子类别
[
{
_id:“6f886eb2d41da75dd5a90bfc”
子类别名称:“子类别名称1”,
类别:“5f886eb2d41da75dd5a90bfc”//1类
},
{
_id:“6f886eb2d41da75dd5a90bfd”
子类别名称:“子类别名称2”,
类别:“5f886eb2d41da75dd5a90bfc”//1类
},
{
_id:“6f886eb2d41da75dd5a90bfa”
子类别名称:“子类别名称2”,
类别:“5f886eb2d41da75dd5a90bfd”//2类
}
]
//产品
[
{
_id:“1f886eb2d41da75dd5a90bfd”
产品名称:“产品名称1”,
子类别:“6f886eb2d41da75dd5a90bfc”//子类别1
},
{
_id:“2f886eb2d41da75dd5a90bfd”
产品名称:“产品名称2”,
子类别:“6f886eb2d41da75dd5a90bfc”//子类别1
}
]
当我查询类别时,我应该得到类别名称和其中产品的数量。
加入子类别集合,在let中传递类别id$lookup
类别id条件$match
加入产品系列$lookup
使用$project
$size
显示必填字段,$project
获取每个子类别的产品总数$reduce
当我查询子类别时,我应该得到子类别名称和其中产品的数量。
加入产品系列$lookup
要显示必填字段,请使用$project
$size
[
{
name: "catName 1",
products: 2
},
{
name: "catName 1",
products: 0
}
]
[
{
name: "subCatName 1",
products: 2
},
{
name: "subCatName 1",
products: 0
},
{
name: "subCatName 3",
products: 0
}
]
db.category.aggregate([
{
$lookup: {
from: "subcategory",
let: { category: "$_id" },
pipeline: [
{ $match: { $expr: { $eq: ["$$category", "$category"] } } },
{
$lookup: {
from: "product",
localField: "_id",
foreignField: "subcategory",
as: "products"
}
},
{ $project: { products: { $size: "$products" } } }
],
as: "products"
}
},
{
$project: {
_id: 0,
name: "$catName",
products: {
$reduce: {
input: "$products",
initialValue: 0,
in: { $add: ["$$value", "$$this.products"] }
}
}
}
}
])
db.subcategory.aggregate([
{
$lookup: {
from: "product",
localField: "_id",
foreignField: "subcategory",
as: "products"
}
},
{
$project: {
_id: 0,
name: "$subCatName",
products: { $size: "$products" }
}
}
])