एकत्रीकरण ढांचा वही है जो आप चाहते हैं:
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" ] }
]
}
}}
])
तो पहले आप दिनांक एकत्रीकरण ऑपरेटरों का उपयोग करके दिन पर समूह बनाते हैं और दिए गए दिन पर कुल आइटम प्राप्त करते हैं। $cond
. का उपयोग ऑपरेटर यहां निर्धारित करता है कि "स्थिति" वास्तव में एक दोष है या नहीं और परिणाम एक सशर्त $sum
है जहां केवल "दोष" मानों की गणना की जाती है।
एक बार उन्हें प्रतिदिन समूहीकृत करने के बाद आप बस $divide
परिणाम, $cond
. के साथ एक और जांच के साथ यह सुनिश्चित करने के लिए कि आप शून्य से विभाजित नहीं कर रहे हैं।