如何解决MongoDB:获取引用架构中的文档数 -当我查询类别时,应该在其中输入category name和count of products-当我查询子类别时,应该在其中得到subcategories name和count of products 当我查询类别时,我应该在其中获取类别名称和产品数量 当我查询子类别时,我应该得到其中的子类别名称和产品数量 $lookup与产品系列一起加入 $project以显示必填字段,并使用$size 获取产品总数 db.subcateg
我有3个收藏集category
,subcategory
和products
参考
-
在
-
subcategory
在 -
products
category_id
中引用了subcategory_id
中引用了我如何获得
-当我查询类别时,应该在其中输入category name
和count of products
。
[
{
name: "catName 1",products: 2
},{
name: "catName 1",products: 0
}
]
-当我查询子类别时,应该在其中得到subcategories name
和count of products
。
[
{
name: "subCatName 1",{
name: "subCatName 1",products: 0
},{
name: "subCatName 3",products: 0
}
]
示例架构:
// category
[
{
_id: "5f886eb2d41da75dd5a90bfc"
catName: "catName 1"
},{
_id: "5f886eb2d41da75dd5a90bfd"
catName: "catName 2"
}
]
// subcategory
[
{
_id: "6f886eb2d41da75dd5a90bfc"
subCatName: "subCatName 1",category: "5f886eb2d41da75dd5a90bfc" // cat 1
},{
_id: "6f886eb2d41da75dd5a90bfd"
subCatName: "subCatName 2",{
_id: "6f886eb2d41da75dd5a90bfa"
subCatName: "subCatName 2",category: "5f886eb2d41da75dd5a90bfd" // cat 2
}
]
// product
[
{
_id: "1f886eb2d41da75dd5a90bfd"
productName: "productName 1",subcategory: "6f886eb2d41da75dd5a90bfc" // subcategory 1
},{
_id: "2f886eb2d41da75dd5a90bfd"
productName: "productName 2",subcategory: "6f886eb2d41da75dd5a90bfc" // subcategory 1
}
]
解决方法
当我查询类别时,我应该在其中获取类别名称和产品数量。
-
$lookup
与子类别集合一起加入,在let中传递类别ID, -
$match
类别ID条件 -
$lookup
与产品系列一起加入 -
$project
使用$size
获得产品总数
-
$project
显示必填字段,$reduce
获取每个子类别的总产品计数
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"] }
}
}
}
}
])
当我查询子类别时,我应该得到其中的子类别名称和产品数量。
-
$lookup
与产品系列一起加入
-
$project
以显示必填字段,并使用$size
获取产品总数
db.subcategory.aggregate([
{
$lookup: {
from: "product",name: "$subCatName",products: { $size: "$products" }
}
}
])
$lookup
与产品系列一起加入$project
以显示必填字段,并使用$size
db.subcategory.aggregate([
{
$lookup: {
from: "product",name: "$subCatName",products: { $size: "$products" }
}
}
])
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。