आप जिस क्वेरी का वर्णन कर रहे हैं, वह दिन के आधार पर दस्तावेज़ों की एक श्रृंखला को समूहीकृत कर रही है, जब उन दस्तावेज़ों में UTC डेटाटाइम होता है।
MongoDB आंतरिक रूप से दिनांक/समय को 1 जनवरी 1970 से मिलीसेकंड की संख्या के रूप में संग्रहीत करता है, इसलिए पहले चरण में प्रत्येक दस्तावेज़ के लिए दिन के प्रारंभ की गणना करने की आवश्यकता होगी, फिर उस प्रारंभ-दिन के मान के आधार पर समूह बनाना होगा।
यदि आप MongoDB 5.0 का उपयोग कर रहे हैं तो आप $dateTrunc का उपयोग कर सकते हैं। ऑपरेटर:
{$dateTrunc:{date:"$createdAt",unit:"day",timezone:"America/New_York"}}
पुराने संस्करणों के लिए, आप या तो उस दिनांक ऑब्जेक्ट की गणना कर सकते हैं जो दिन की शुरुआत का प्रतिनिधित्व करता है या केवल दिनांक वाली स्ट्रिंग बना सकता है।
स्ट्रिंग विकल्प के लिए:
{$concat: [
{$toString:{$year:{ date:"$createdAt", timezone:"America/New_York" }}},
"-",
{$toString:{$month:{ date:"$createdAt", timezone:"America/New_York" }}},
"-",
{$toString:{$dayOfMonth:{ date:"$createdAt", timezone:"America/New_York" }}},
]}
तो कुल मिलाकर एग्रीगेशन पाइपलाइन होगी:
- वांछित समय सीमा में चयनित दस्तावेज़ों के लिए $मिलान करें
- प्रत्येक दस्तावेज़ के लिए दिन की शुरुआत की गणना करने के लिए $प्रोजेक्ट
- $समूह दिन की शुरुआत तक, घटनाओं की संख्या गिनते हुए
- दस्तावेज़ को वांछित प्रारूप में बदलने के लिए आगे के चरण