微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MongoDB:获取引用架构中的文档数 -当我查询类别时,应该在其中输入category name和count of products-当我查询子类别时,应该在其中得到subcategories name和count of products 当我查询类别时,我应该在其中获取类别名称和产品数量 当我查询子类别时,我应该得到其中的子类别名称和产品数量 $lookup与产品系列一起加入 $project以显示必填字段,并使用$size 获取产品总数 db.subcateg

如何解决MongoDB:获取引用架构中的文档数 -当我查询类别时,应该在其中输入category name和count of products-当我查询子类别时,应该在其中得到subcategories name和count of products 当我查询类别时,我应该在其中获取类别名称和产品数量 当我查询子类别时,我应该得到其中的子类别名称和产品数量 $lookup与产品系列一起加入 $project以显示必填字段,并使用$size 获取产品总数 db.subcateg

我有3个收藏集categorysubcategoryproducts

参考

    category_id中引用了
  1. subcategory
  2. subcategory_id中引用了
  3. products

我如何获得

  1. 每个productscategory数量
  2. 每个subcategoriescategory数量
  3. 每个productssubcategory数量

-当我查询类别时,应该在其中输入category namecount of products

[
 {
   name: "catName 1",products: 2
 },{
   name: "catName 1",products: 0
 }
]

-当我查询子类别时,应该在其中得到subcategories namecount 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"] }
        }
      }
    }
  }
])

Playground


当我查询子类别时,我应该得到其中的子类别名称和产品数量。
  • $lookup与产品系列一起加入
  • $project以显示必填字段,并使用$size
  • 获取产品总数
db.subcategory.aggregate([
  {
    $lookup: {
      from: "product",name: "$subCatName",products: { $size: "$products" }
    }
  }
])

Playground

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。