【发布时间】:2020-08-11 19:00:43
【问题描述】:
在我的收藏中,我有大量文档,每个文档都包含 4 种类别。
groupmainCategorysubCategorysubSubCategory
我正在寻找一种通过group 来$group 的方法,在group 中应该有一个mainCategory 的数组,在mainCategory 中应该有一个subCategory 的数组,并且在subCategory 应该有一个subSubCategory 的数组。结果应仅包含类别的值/名称。
预期结果:
const result = [
{
"group": "Teknik",
"mainCategory": [
{
"name": "Gaming",
"subCategory": [
{
"name": "Playstation",
"subSubCategory": [
{"name": "Games"},
{"name": "Accessories"},
{"name": "Console"}
]
},
{
"name": "Xbox",
"subSubCategory": [
{"name": "Games"},
{"name": "Accessories"},
{"name": "Console"}
]
}
]
}, {
"name": "Audio",
"subCategory": [
{
"name": "Headphones",
"subSubCategory": [
{"name": "Wireless"},
{"name": "Non Wireless"},
]
},
{
"name": "Speakers",
"subSubCategory": [
{"name": ""},
]
}
]
},
]
}
]
我认为问题是我需要$push 父类中的每个类别并创建新的$groups?但是当添加更多$groups 时,它只是最后一个被“保存”的。其他的似乎没有被“保存”。还是我做错了什么?
示例数据和工作代码基于 prev。测试数据。
https://mongoplayground.net/p/C0-L-rGPfwy
集合中的产品结构
productName :"Horizon Zero Dawn"
group:"Teknik"
mainCategory: "Gaming"
subCategory:"Playstation"
subSubCategory: "Games"
我的聚合
const categories = await Product.aggregate([
{$match: {group: 'Teknik'}},
{
$group: {
_id: {
group: '$group',
mainCategory: '$mainCategory',
subCategory: '$subCategory',
subSubCategory: '$subSubCategory',
}
},
},
{
$group: {
_id: "$_id.group",
mainCategory: {
$push:
{
name: "$_id.mainCategory",
subCategory: {
name: "$_id.subCategory",
subSubCategory: {
name: "$_id.subSubCategory"
}
}
}
},
}
},
]);
有了这个,我为每个子子类别获得 1 个对象,但我希望它们在同一个对象中。
"_id": "Teknik",
"mainCategory": [
{
"name": "Gaming",
"subCategory": {
"name": "Xbox",
"subSubCategory": {
"name": "Games"
}
}
},
{
"name": "Spel & Gaming",
"subCategory": {
"name": "Xbox",
"subSubCategory": {
"name": "Accessories"
}
}
},
]
【问题讨论】:
-
@turivishal 在帖子的顶部 const result = [...] 但现在澄清了。
-
大约有 40 000 个文档,所以我在上面的链接中添加了一些示例数据。 mongoplayground.net/p/QjjPTuQWspt.
标签: mongodb mongoose aggregation-framework