यहां बताया गया है कि आप इसे एकत्रीकरण ढांचे में कैसे कर सकते हैं। मैं एक छोटे से सरलीकरण का उपयोग कर रहा हूं - मैं केवल वर्ष, माह और तिथि पर समूह बना रहा हूं - आपके मामले में आपको बेहतर दानेदार गणना के लिए घंटे और मिनट जोड़ने की आवश्यकता होगी। आपके पास यह विकल्प भी है कि यदि आपको प्राप्त होने वाले डेटा नमूने में बिंदु वितरण एक समान नहीं है तो भारित औसत करना है या नहीं।
project={"$project" : {
"year" : {
"$year" : "$DateTime"
},
"month" : {
"$month" : "$DateTime"
},
"day" : {
"$dayOfWeek" : "$DateTime"
},
"array_serial" : 1,
"Port Name" : 1,
"metric" : 1
}
};
group={"$group" : {
"_id" : {
"a" : "$array_serial",
"P" : "$Port Name",
"y" : "$year",
"m" : "$month",
"d" : "$day"
},
"avgMetric" : {
"$avg" : "$metric"
}
}
};
db.metrics.aggregate([project, group]).result
मैंने इसे कुछ यादृच्छिक नमूना डेटा के साथ चलाया और इस प्रारूप का कुछ प्राप्त किया:
[
{
"_id" : {
"a" : "12345",
"P" : "CL1-B",
"y" : 2012,
"m" : 9,
"d" : 6
},
"avgMetric" : 100.8
},
{
"_id" : {
"a" : "12345",
"P" : "CL1-B",
"y" : 2012,
"m" : 9,
"d" : 7
},
"avgMetric" : 98
},
{
"_id" : {
"a" : "12345",
"P" : "CL1-A",
"y" : 2012,
"m" : 9,
"d" : 6
},
"avgMetric" : 105
}
]
जैसा कि आप देख सकते हैं यह एक परिणाम प्रति array_serial, पोर्ट नाम, वर्ष/माह/तारीख संयोजन है। आप उन्हें उस क्रम में लाने के लिए $sort का उपयोग कर सकते हैं जिस क्रम में आप उन्हें वहां से संसाधित करना चाहते हैं।
यहां बताया गया है कि आप हर पांच मिनट में मिनट को राउंडिंग करते हुए औसत से घंटे और मिनट को शामिल करने के लिए प्रोजेक्ट चरण का विस्तार कैसे करेंगे:
{
"$project" : {
"year" : {
"$year" : "$DateTime"
},
"month" : {
"$month" : "$DateTime"
},
"day" : {
"$dayOfWeek" : "$DateTime"
},
"hour" : {
"$hour" : "$DateTime"
},
"fmin" : {
"$subtract" : [
{
"$minute" : "$DateTime"
},
{
"$mod" : [
{
"$minute" : "$DateTime"
},
5
]
}
]
},
"array_serial" : 1,
"Port Name" : 1,
"metric" : 1
}
}
आशा है कि आप इसे अपने विशिष्ट डेटा और आवश्यकताओं तक विस्तारित करने में सक्षम होंगे।