वास्तविक रूप से आपको यहां टाइमस्टैम्प स्ट्रिंग्स को "ठीक" करना चाहिए। लेकिन आईएसओ स्ट्रिंग्स में निहित "yyyy-dd-mm" प्रारूप के कारण वे कम से कम "लेक्सिकल ऑर्डर" में हैं।
इसलिए चूंकि उनकी एक निश्चित लंबाई होती है, हम सर्वर साइड एग्रीगेशन के लिए एग्रीगेशन फ्रेमवर्क का उपयोग करके वास्तव में उन पर एग्रीगेट कर सकते हैं।
दिनांक चयन के लिए मई माह का नमूना लेना:
cursor = client[page1.currentDB][page2.currentColl].aggregate([
{ "$match": {
"Technique-Meteo_Direction moyenne du vent_Mean value wind direction[]":
{ "$exists": True },
"timestamp": {
"$gte": "2017-05-01 00:00:00", "$lt": "2017-06-01 00:00:00"
}
}},
{ "$group": {
"_id": {
"$substr": [ "$timestamp", 0, 10 ]
},
"average":
{ "$avg": "$Technique-Meteo_Direction moyenne du vent_Mean value wind direction[]" }
}}
])
यह चयनित महीने में प्रत्येक दिन के लिए कुल "प्रति दिन" प्राप्त करेगा। यह क्षेत्रों के शाब्दिक मूल्य पर निर्भर करता है। यहां सभी अंतरालों पर एक ही मूल सिद्धांत लागू होता है। इसलिए जब तक आप चयन करना चाहते हैं, तब तक आप केवल शून्य मानों के साथ स्ट्रिंग्स को भरें।
वही यहां "ग्रुपिंग की" के लिए जाता है, जहां _id
. का मान होता है इसी तरह आवश्यक अंतराल तक सबस्ट्रिंग अप होना चाहिए। सौभाग्य से स्ट्रिंग प्रारूप "शून्य गद्देदार" है इसलिए मान "10"
. से कम है "05"
. के अनुसार शून्य से पहले हैं . फिर से यह "श्रेणियों" के लिए शाब्दिक क्रम को बनाए रखता है।
यही आपका लक्ष्य होना चाहिए, और मुझे लगता है कि आपको यहां अपने क्षेत्रों का चयन करना चाहिए, साथ ही साथ श्रेणी चयन के लिए टाइमस्टैम्प स्ट्रिंग्स बनाना चाहिए।
लेकिन आप निश्चित रूप से $group<करने में सक्षम होकर कुछ हासिल कर सकते हैं /कोड>
[$substr][2]
. पर आपके आवश्यक अंतराल को इंगित करने के लिए वास्तविक मूल्य का हिस्सा, और केवल प्रत्येक अंतराल के लिए एकाधिक क्वेरी आमंत्रणों को पुनरावृत्त करने की आवश्यकता नहीं है और डेटाबेस को आपके लिए यह करने दें।
आपकी "कुंजी" हालांकि एक और मुद्दा है, और चूंकि वे सुसंगत नहीं हैं, इसलिए आप संभावित "कुंजी नामों" के माध्यम से पुनरावृत्ति करने और उन सभी के लिए एक अलग एकत्रीकरण करने के साथ फंस गए हैं। आप संभवतः कथन को लंबा कर सकते हैं और $ifNull
यह निर्धारित करने के लिए कि कब वृद्धि करनी है। फिर आप $divid
करेंगे
$group
के "बाद"
अंतिम "औसत" प्राप्त करने के लिए पाइपलाइन चरण।
वह अंतिम बिट पूर्ण दायरे को जाने बिना थोड़ा जटिल है, और यह पूरी तरह से आपके प्रश्न में नहीं है। इसलिए मैं इसे आप पर छोड़ता हूं कि आप काम करें, या इसके बारे में एक अलग प्रश्न पूछें।