次のようなドキュメントのコレクションがあります: {
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」行を除いて、すべてが機能します。私が作成しようとしているロジックは次のとおりです。
上記のレコードの場合、errorCodes セットには以下が含まれている必要があります:
... errorCodes: [S1002,A1001], ...