我必须在MongoDB中汇总一个集合。
问题是:将一个数组上移到一个级别,然后对其进行某种放松。
我有这样的收藏:
{
"name": "some_name",
"pair": [
{
"product": "prod1",
"brands": [
"coca-cola",
"pepsi",
"adidas"
]
}
,
{
"product": "prod2",
"brands": [
"nike",
"reebok",
]
}
]
}
聚合之后,我想看到以下信息:
{
"name": "some_name",
"pair": [
{
"product": "prod1",
"brands": "coca-cola",
}
,
{
"product": "prod1",
"brands": "pepsi",
}
,
{
"product": "prod1",
"brands": "adidas",
}
,
{
"product": "prod2",
"brands": "nike",
}
,
{
"product": "prod2",
"brands": "reebok",
}
]
}
即我们将获得数组对:其中元素包含带有产品和品牌的文档。
谢谢您的帮助!
答案 0 :(得分:1)
您也可以尝试下面的汇总
db.collection.aggregate([
{ "$addFields": {
"pair": {
"$reduce": {
"input": {
"$map": {
"input": "$pair",
"as": "sd",
"in": {
"$map": {
"input": "$$sd.brands",
"in": { "product": "$$sd.product", "brands": "$$this" }
}
}
}
},
"initialValue": [],
"in": { "$concatArrays": ["$$value", "$$this"] }
}
}
}}
])