【发布时间】:2021-04-19 08:34:06
【问题描述】:
我有以下 MongoDB 数据模型:
{
"_id": {
"$oid": "5ffd62eedf2075dfc5a5b0b8"
},
"portfolio": "4086_ClearCreek",
"ruleDescription": "Maximum Moody's Rating Factor Test",
"failureLevel": 3,
"failureCategory": "",
"hasHoldings": true,
"summaryStatus": 0,
"summaryStatusLabel": "Failure",
"ruleType": 1,
"ruleSource": 0,
"ruleValueType": 0,
"testValue": "3673",
"limitValue": "2400",
"limitOperator": "<=",
"testRoom": "-1273",
"numeratorValue": "185278281.19",
"denominatorValue": "680407923070.46",
"ruleCategory": "Collateral Quality",
"topLevelFilter": {
"id": "5fd1bd7868d7ac4e211a7642",
"type": "WSO CMP Dataset",
"name": "Clear Creek CLO, LTD._Clear Creek Test Data Set_Initial"
},
"executionDateTime": "2021-01-12T08:50:54.103"
}
我想看到这样的结果:-
{
"_id" : "Concentration Limitations",
"pass" : 1,
"warn" : 0,
"fail" : 0,
"portfolio" : [
{
"id" : "5fd1bd7868d7ac4e211a7642",
"name" : "Clear Creek CLO, LTD._Clear Creek Test Data Set_Initial",
"pass" : 1,
"warn" : 0,
"fail" : 0
}
]
}
这是我试图实现上述结果集的代码:
db.rule_execution_result.aggregate([{
$group: {
_id: '$ruleCategory',
pass: {
$sum: {
$cond: [{
$eq: ["$summaryStatus", 1]
}, 1, 0]
}
},
warn: {
$sum: {
$cond: [{
$eq: ["$summaryStatus", 2]
}, 1, 0]
}
},
fail: {
$sum: {
$cond: [{
$eq: ['$summaryStatus', 0]
}, 1, 0]
}
},
portfolio: {
$push: {
id: '$$ROOT.topLevelFilter.id',
name: '$$ROOT.topLevelFilter.name',
category: '$$ROOT.ruleCategory',
summary:'$$ROOT.summaryStatus',
pass: '',
warn: '',
fail: ''
}
}
}
}
]).pretty()
我想在topLevelFilter.id的基础上为portfolio创建另一个嵌套组并计算summaryStatus的总和,但无法这样做。
那么任何人都可以帮我实现结果集吗?
【问题讨论】:
标签: mongodb mongodb-query amazon-dynamodb