mongodb 列出每个类别下的产品

问题描述 投票:0回答:1

必须列出如下所示的类别和产品,必须从 mongodb 检索数据。

A类

产品1
产品2
产品3

B类

产品4
产品5
产品6

数据库中的类别:

{
  "_id": {
    "$oid": "62c827b5a427b63741da9175"
  },
  "name": {
    "en": "Home"
  }
}

数据库中的产品:

{
  "_id": {
    "$oid": "648714ca2c67a70008c616db"
  },
  "categories": [
    {
      "$oid": "649911fc0e298800088d0214"
    },
  ],
  "image": [1000047887.png",1000047889.jpg"
  ],
  "tag": [
    "[]"
  ],
  "category": {
    "$oid": "648702f958cc2d0008cda715"
  },
  "name": "Product A"
}

需要获取数据为:

[
  {
   "category_name": "Abc",
   "products": [{
      "product_name": "cvb",
      ....
    },
    {
      "product_name": "cvb",
      ....
    }
    ]
  },
  {
   "category_name": "Abc",
   "products": [{
      "product_name": "cvb",
      ....
    },
    {
      "product_name": "cvb",
      ....
    }
    ]
  }
]
mongodb mongodb-query
1个回答
0
投票

在这种情况下,您所需要做的就是使用

aggregation
$lookup
,通过类别 ID 连接 2 个集合。

  {
    "$lookup": {
      "from": "product",
      "localField": "_id",
      "foreignField": "category",
      "as": "products"
    }
  }

然后,您可以在聚合中添加

$project
步骤来格式化输出。

  {
    "$project": {
      "category_name": "$name.en",
      "products": {
        "$map": {
          "input": "$products",
          "as": "temp",
          "in": {
            "product_name": "$$temp.name"
          }
        }
      }
    }
  }

游乐场示例

© www.soinside.com 2019 - 2024. All rights reserved.