我有一个包含如下文档的集合:{
ipAddr: '1.2.3.4',
"results" : [
{
"Test" : "Sight",
"Score" : "FAIL",
"Reason" : "S1002"
},
{
"Test" : "Speed",
"Score" : "FAIL",
"Reason" : "85"
},
{
"Test" : "Sound",
"Score" : "FAIL",
"Reason" : "A1001"
}
],
"finalGrade" : "FAILED"
}
这是我正在尝试编写的聚合查询,我想要做的(见注释掉的部分)是创建一个分组字段,每个 ipAddr,“原因/错误”代码,但前提是原因代码以一个特定的字母,并且只添加一次代码,我尝试了以下方法:
db.aggregate([
{$group:
{ _id: "$ipAddr",
attempts: {$sum:1},
results: {$push: "$finalGrade"},
// errorCodes: {$addToSet: {$cond: ["$results.Reason": /[A|B|S|N.*/, "$results.Reason", ""]}},
finalResult: {$last: "$finalGrade"} }
}
]);
一切正常,不包括注释掉的“errorCodes”行。我试图创建的逻辑是:“添加错误代码设置结果的值。如果它以 A、B、S 或 N 开头,则原因代码,否则没有可添加的内容”。
对于上面的记录,errorCodes 集应包含:
... errorCodes: [S1002,A1001], ...