首页 > 解决方案 > Mongo DB - 如何根据供应商获取组产品?

问题描述

我需要你的帮助。鉴于下面的结构,我需要以某种方式查询文档以获取给定供应商的所有“产品”。

{
    "supplier" : [ 
        {"name" : "supplier 1",
            "products" : [
                { "name" : "product 1" }
                { "name" : "product 2" }
            ]
        },
        {
         "name" : "supplier 1",
             "products" : [
                { "name" : "product 3" }
            ]
        },
        {
         "name" : "supplier 2",
             "products" : [
                { "name" : "product 3" }
            ]
        },
    ]
}

“供应商 1”的结果文档应如下(或类似)。

{
    "products" : [
        { "name" : "product 1" },
        { "name" : "product 2" },
        { "name" : "product 3" }
    ]
      
}

结果应仅包含 的唯一值products。什么是好的服务器端解决方案?先感谢您。

标签: mongodb

解决方案


  • $unwind解构supplier数组
  • $group通过supplier.name并制作数组products
  • $project显示必填字段,$reduce使用循环products和连接数组或产品$concatArrays
db.collection.aggregate([
  { $unwind: "$supplier" },
  {
    $group: {
      _id: "$supplier.name",
      products: { $push: "$supplier.products" }
    }
  },
  {
    $project: {
      _id: 0,
      name: "$_id",
      products: {
        $reduce: {
          input: "$products",
          initialValue: [],
          in: { $concatArrays: ["$$this", "$$value"] }
        }
      }
    }
  }
])

操场


推荐阅读