【发布时间】:2023-03-05 12:58:01
【问题描述】:
我有多个以下结构的文档。
{
"_id": ObjectId("60c07a1f9853c900c2026440"),
"ProductID": "A",
"Colours": [
{
"ID": "01",
"Name": "BLACK",
"Sizes": [
{
"Code": "S1",
"Stock": 2
},
{
"Code": "S2",
"Stock": 3
}
]
},
{
"ID": "02",
"Name": "WHITE",
"Sizes": [
{
"Code": "S1",
"Stock": 5
},
{
"Code": "S2",
"Stock": 2
}
]
}
]
}
我想检索文档,其中 Colours 的每个元素内都有一个名为 TotalStock 的附加字段,其中包含内部所有 Sizes 中 Stock 的总和,同时省略 Sizes 本身。
所以我检索到的文档如下所示:
{
"ProductID": "A",
"Colours": [
{
"ID": "01",
"Name": "BLACK",
"TotalStock":5
},
{
"ID": "02",
"Name": "WHITE",
"TotalStock":7
}
]
}
通过$unwind、$addFields、$sum 和$project 的组合,我能够在一定程度上实现这一目标。这是我的查询:
db.collection.aggregate([
{
"$unwind": "$Colours"
},
{
"$addFields": {
"Colours.TotalStock": {
"$sum": "$Colours.Sizes.Stock"
}
}
},
{
"$project": {
"_id": 0,
"ProductID": 1,
"Colours.ID": 1,
"Colours.Name": 1,
"Colours.TotalStock": 1,
}
}
])
问题
由于$unwind,我的查询为每种颜色提供了一个单独的文档,而我需要它们在同一个文档中。我仍在学习,不知道如何以及是否应该为此使用$group。我需要对查询进行哪些更改才能获得预期结果?
Here 是带有上述示例和查询的游乐场。
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework