【发布时间】:2021-07-20 11:44:33
【问题描述】:
我有一些包含另一个数组的对象数组的数据。我正在尝试展开 courses 数组,然后展开 requirements 数组以匹配主题,然后将所有内容组合在一起。
到目前为止,我可以很好地使用 courses 数组。但是我无法为第二个数组requirements做同样的事情。
[
{
"_id": 1,
"name": "provider name",
"courses": [
{
"_id": 1,
"name": "course name",
"requirements": [
{
"subjects": [
"SubjectA::B",
"SubjectB::B",
"SubjectC::B"
]
},
{
"subjects": [
"SubjectA::B",
"SubjectB::B",
"SubjectC::B"
]
}
]
}
]
}
]
首先我展开两个数组
{
$unwind: {
path: '$courses',
preserveNullAndEmptyArrays: true
}
},
{
$unwind: {
path: '$courses.requirements',
preserveNullAndEmptyArrays: true
}
},
我如何对第一个数组进行分组
{
$group: {
_id: '$_id',
root: { $mergeObjects: '$$ROOT' },
courses: { $push: '$courses' }
}
},
{
$replaceWith: {
$mergeObjects: ['$root', '$$ROOT'],
}
},
{
$project: { root: 0 }
},
预期输出
[
{
"_id": 1,
"name": "provider name",
"courses": [
{
"_id": 1,
"name": "course name",
"requirements": [
{
"subjects": [
"SubjectA::B",
"SubjectB::B",
"SubjectC::B"
]
},
{
"subjects": [
"SubjectA::B",
"SubjectB::B",
"SubjectC::B"
]
}
]
}
]
}
]
但我明白了
[
{
"_id": 1,
"name": "provider name",
"courses": [
{
"_id": 1,
"name": "course name",
"requirements": [
{
"subjects": [
"SubjectA::B",
"SubjectB::B",
"SubjectC::B"
]
},
{
"subjects": [
"SubjectA::B",
"SubjectB::B",
"SubjectC::B"
]
}
]
},
{
"_id": 1,
"name": "course name",
"requirements": [
{
"subjects": [
"SubjectA::B",
"SubjectB::B",
"SubjectC::B"
]
},
{
"subjects": [
"SubjectA::B",
"SubjectB::B",
"SubjectC::B"
]
}
]
}
]
}
]
【问题讨论】:
-
添加预期输出
标签: javascript arrays mongodb mongoose aggregation-framework