集約フレームワークはあなたが望むものです:
db.collection.aggregate([
{ "$group": {
"_id": {
"year": { "$year": "$utc_timestamp" },
"month": { "$month": "$utc_timestamp" },
"day": { "$dayOfMonth": "$utc_timestamp" },
},
"defects": {
"$sum": { "$cond": [
{ "$eq": [ "$status", "defect" ] },
1,
0
]}
},
"totalCount": { "$sum": 1 }
}},
{ "$project": {
"defect_rate": {
"$cond": [
{ "$eq": [ "$defects", 0 ] },
0,
{ "$divide": [ "$defects", "$totalCount" ] }
]
}
}}
])
したがって、最初に日付集計演算子を使用してその日にグループ化し、特定の日のアイテムのtotalCountを取得します。 $cond
の使用 ここでの演算子は、「ステータス」が実際に欠陥であるかどうかを判断し、結果は条件付きの $sum
ここでは、「欠陥」の値のみがカウントされます。
それらが1日ごとにグループ化されると、単に $divide
結果、 $cond
を使用した別のチェック ゼロで除算していないことを確認します。