आप दिनांक एकत्रीकरण ऑपरेटरों
का उपयोग नहीं कर सकते किसी अन्य चीज़ पर जो एक Date
है
वस्तु ही। आपका सबसे अच्छा विकल्प इन "स्ट्रिंग्स" को उचित Date
ऑब्जेक्ट्स ताकि आप इस और भविष्य के संचालन में सही ढंग से क्वेरी कर सकें।
उस ने कहा, यदि आपके "स्ट्रिंग्स" में हमेशा एक सामान्य संरचना होती है, तो ऐसा करने का एक तरीका है एकत्रीकरण ढांचा
औजार। इसके लिए बहुत अधिक हेरफेर की आवश्यकता होती है जो समस्या से निपटने के लिए इसे "इष्टतम" दृष्टिकोण नहीं बनाता है। लेकिन "दोहरे अंकों" की एक सेट संरचना और एक सुसंगत सीमांकक के साथ यह संभव है $substr
ऑपरेटर:
db.collection.aggregate([
{ "$group": {
"_id": {
"year": { "$substr": [ "$dateStr", 7, 4 ] },
"month": { "$substr": [ "$dateStr", 4, 2 ] }
},
"count": { "$sum": 1 }
}}
])
तो जावास्क्रिप्ट कास्टिंग एकत्रीकरण ढांचे के अंदर काम नहीं करता है। आप हमेशा "क्लाइंट कोड" मूल्यांकन के आधार पर पाइपलाइन में इनपुट "फ़ीड" कर सकते हैं, लेकिन एकत्रीकरण प्रक्रिया स्वयं किसी भी कोड का मूल्यांकन नहीं करती है। मूल क्वेरी इंजन की तरह, यह सब "डेटा संरचना" कार्यान्वयन पर आधारित है जो काम करने के लिए "मूल ऑपरेटर" निर्देशों का उपयोग करता है।
आप एग्रीगेशन पाइपलाइन में स्ट्रिंग्स को तारीखों में नहीं बदल सकते। आपको असली BSON Date
के साथ काम करना चाहिए
ऑब्जेक्ट्स, लेकिन आप इसे स्ट्रिंग्स के साथ कर सकते हैं यदि एक सुसंगत प्रारूप है जिसे आप "लेक्सिकल ऑर्डर" में प्रस्तुत कर सकते हैं।
मेरा अब भी सुझाव है कि आप इन्हें BSON Dates
में बदल दें यथाशीघ्र। और सावधान रहें कि "ISODate" या UTC मान एक भिन्न स्ट्रिंग रूप के साथ बनाया गया है। यानी:
new Date("2020-01-07")
"yyyy-mm-dd" प्रारूप में होना। कम से कम जावास्क्रिप्ट आमंत्रण के लिए।