【发布时间】:2021-12-12 14:26:51
【问题描述】:
我需要编写一个聚合来使用条件将一个数组字段合并到另一个数组字段中。
示例: 原始文档:
[{
"key": 1,
"risks": [{
"_id": "1234-risk1",
"name": "risk1"
}, {
"_id": "9999-risk2",
"name": "risk2"
}
],
"controls": [{
"identifier": "P8.1.3",
"links": [{
"entity": {
"valueKey": "1234-risk1"
}
}, {
"entity": {
"valueKey": "456"
}
}
]
}, {
"identifier": "X8.1.3",
"links": [{
"entity": {
"valueKey": "1234-risk1"
}
}, {
"entity": {
"valueKey": "456"
}
}
]
},
{
"identifier": "Y8.1.3",
"links": [{
"entity": {
"valueKey": "9999-risk2"
}
}, {
"entity": {
"valueKey": "456"
}
}
]
},
{
"identifier": "A1.2.9",
"links": [{
"entity": {
"valueKey": "456"
}
}
]
}
]
}
]
字段 risk.id(例如:1234-risk1 和 9999-risk2)在控件数组字段中具有相关控件。 还有一些控件也不匹配任何 risk.id 匹配项。
我需要创建一个新的字段 riskControls 到俱乐部风险 + 其相应的控制(如果有),然后控制没有风险。
预期:
[{
"key": 1,
"riskControls": [{
"_id": "1234-risk1",
"name": "risk1",
"controls": [{
"identifier": "P8.1.3",
"links": [{
"entity": {
"valueKey": "1234-risk1"
}
}, {
"entity": {
"valueKey": "456"
}
}
]
}, {
"identifier": "X8.1.3",
"links": [{
"entity": {
"valueKey": "1234-risk1"
}
}, {
"entity": {
"valueKey": "456"
}
}
]
}
]
}, {
"_id": "9999-risk2",
"name": "risk2",
"controls": [{
"identifier": "Y8.1.3",
"links": [{
"entity": {
"valueKey": "9999-risk2"
}
}, {
"entity": {
"valueKey": "456"
}
}
]
}
]
}, {
//no risk details
"controls": [{
"identifier": "A1.2.9",
"links": [{
"entity": {
"valueKey": "456"
}
}
]
}
]
}
]
}
]
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework aggregation