我需要从名称为“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" }
]
}
]
},
]
答案 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" }
}
}
])