टिप्पणियों के अनुसार अब तक यह स्पष्ट नहीं है कि आप क्या समूह बना रहे हैं या अंतिम परिणाम के रूप में आप क्या चाहते हैं, यह कहने के अलावा कि आप अपनी तिथियों को "बस दिन" जैसे कुछ घंटों या मिनटों के साथ जोड़ना चाहते हैं। संभवतः आप किसी उद्देश्य के लिए उन विशिष्ट दिनों को चाहते हैं।
विभिन्न दिनांक संचालक हैं पाइपलाइन में आप तारीखों पर उपयोग कर सकते हैं, और यह है $concatए> ऑपरेटर भी। दुर्भाग्य से सभी दिनांक संचालक उनके परिणाम के रूप में एक पूर्णांक उत्पन्न करें, और जिस प्रकार की दिनांक स्ट्रिंग आप चाहते हैं, उसके लिए $concat केवल तार के साथ काम करेगा। दूसरी समस्या यह है कि आप कास्ट . नहीं कर सकते हैं एकत्रीकरण के भीतर एक स्ट्रिंग प्रकार में पूर्णांक।
लेकिन आप कर सकते हैं उप-दस्तावेजों का उपयोग करें, यहां हम केवल तारीख के साथ काम करेंगे:
db.record.aggregate([
// Unwind the array to work with it
{$unwind: "$date"},
// project into our new 'day' document
{$project:{
day: {
year: {$year: "$date"},
month: {$month: "$date"},
day: {$dayOfMonth: "$date"}
}
} },
// optionalally sort if date order is important [ oldest -> newest ]
{$sort: { "day.year": -1, "day.month": -1, "day.day": -1}},
// Wind back unique values into the array
{$group: {_id:"$_id", days: {$addToSet: "$day"} }}
])
तो, यह एक स्ट्रिंग नहीं है, लेकिन इसे आसानी से एक में पोस्ट-प्रोसेस किया जा सकता है, लेकिन सबसे महत्वपूर्ण बात यह है कि यह समूहीकृत और क्रमबद्ध है।
यदि आप अद्वितीय dates
. चाहते हैं तो सिद्धांत वही रहेंगे इस तरह अंत में एक सरणी के रूप में या आप उन तिथियों के अनुसार योग समूह बनाना चाहते हैं। इसलिए मुख्य रूप से दिनांक ऑपरेटरों का उपयोग करके $unwind और $project भागों को ध्यान में रखें।
--संपादित करें--
समुदाय को धन्यवाद के साथ जैसा कि इस पोस्ट में दिखाया गया है यह अदस्तावेजीकृत है $substr . का व्यवहार , जिसमें पूर्णांकों को तार के रूप में डाला जा सकता है।
db.record.aggregate([
// Unwind the array to work with it
{$unwind: "$date"},
// project into our new 'day' document
{$project:{
day: {
year: {$year: "$date"},
month: {$month: "$date"},
day: {$dayOfMonth: "$date"}
}
} },
// optionalally sort if date order is important [ oldest -> newest ]
{$sort: { "day.year": -1, "day.month": -1, "day.day": -1}},
// now we are going to project to a string ** magic @heinob **
{$project: {
day: {$concat: [
{$substr: [ "$day.year", 0, 4 ]},
"-",
{$substr: [ "$day.month", 0, 2 ]},
"-",
{$substr: [ "$day.day", 0, 2 ]}
]}
}},
// Wind back unique values into the array
{$group: {_id:"$_id", days: {$addToSet: "$day"} }}
])
और अब days
तार हैं। जैसा कि मैंने पहले उल्लेख किया है, यदि आदेश देना आपके लिए महत्वपूर्ण है तो सबसे अच्छा तरीका यह है कि एक दस्तावेज़ प्रकार में प्रोजेक्ट किया जाए जैसा कि किया गया है और संख्यात्मक कुंजियों पर क्रमबद्ध करें। स्वाभाविक रूप से दिनांक को रूपांतरित करने वाला $project संक्षिप्तता के लिए $group चरण में घायल हो सकता है, जो संभवत:पूरे दस्तावेज़ के साथ काम करते समय आप करना चाहते हैं।