如何从嵌套数组中获取不同的值?

时间:2021-05-26 12:12:25

标签: mongodb aggregation-framework

我需要从名称为“color”的文档中获取内容中所有不同的颜色名称,

匹配条件以获得不同的 content.values.name where content.name = color

预期结果:

[red, green, blue,tomato, sky, darkblue]

示例文档:

[
    {
        content:[
            {
                name:"color",
                values: [ 
                  { name: "red" },
                  { name: "green" },
                  { name: "blue" }
                ]
            },
            {
                name:"extra",
                values: [ 
                  { name: "A" },
                  { name: "B" },
                  { name: "C" }
                ]
            }
        ]
    },
    {
        content:[
            {
                name:"color",
                values: [ 
                  { name: "tomato" },
                  { name: "sky" },
                  { name: "darkblue" }
                ]
            },
            {
                name:"extra",
                values: [ 
                  { name: "AA" },
                  { name: "AB" },
                  { name: "AC" }
                ]
            }
           
        ]
    },
]

1 个答案:

答案 0 :(得分:1)

  • $match color name 属性并过滤主文档
  • $unwind 解构 content 数组
  • $match 颜色 name 和过滤子文档
  • $unwind 解构 values 数组
  • $group by null 并从值中获取唯一的 name
db.collection.aggregate([
  { $match: { "content.name": "color" } },
  { $unwind: "$content" },
  { $match: { "content.name": "color" } },
  { $unwind: "$content.values" },
  {
    $group: {
      _id: null,
      values: { $addToSet: "$content.values.name" }
    }
  }
])

Playground