MongoDB में, $dateToString
एकत्रीकरण पाइपलाइन ऑपरेटर किसी दिए गए दिनांक ऑब्जेक्ट को एक स्ट्रिंग में कनवर्ट करता है।
$dateToString
ऑपरेटर या तो दिनांक, टाइमस्टैम्प, या ऑब्जेक्ट आईडी स्वीकार करता है।
आप एक प्रारूप विनिर्देश प्रदान करके परिणाम के लिए उपयोग करने के लिए एक प्रारूप निर्दिष्ट कर सकते हैं। प्रारूप विनिर्देश कोई भी स्ट्रिंग शाब्दिक हो सकता है, जिसमें 0 या अधिक प्रारूप विनिर्देशक होते हैं।
प्रारूप विनिर्देश MongoDB संस्करण 4.0 से वैकल्पिक है, जब featureCompatibilityVersion
4.0
. पर सेट है या उच्चतर। पहले के संस्करणों को प्रारूप विनिर्देश की आवश्यकता होती है।
आप वैकल्पिक रूप से timezone
. का उपयोग कर सकते हैं उपयोग करने के लिए समय क्षेत्र निर्दिष्ट करने के लिए पैरामीटर।
आप onNull
. का भी उपयोग कर सकते हैं यह निर्दिष्ट करने के लिए पैरामीटर कि यदि दिनांक null
है तो क्या लौटाया जाए या गायब है।
उदाहरण
मान लीजिए हमारे पास pets
. नामक संग्रह है निम्नलिखित दस्तावेज़ के साथ:
{ "_id" : ObjectId("600631c7c8eb4369cf6ad9c8"), "name" : "Fetch", "born" : ISODate("2020-12-31T23:30:15.123Z") }
born
. से दिनांक स्ट्रिंग वापस करने के लिए हम निम्न कोड चला सकते हैं उस दस्तावेज़ में फ़ील्ड।
db.pets.aggregate(
[
{
$project: {
_id: 0,
dateString: { $dateToString: { format: "%Y-%m-%dT%H:%M:%S.%LZ", date: "$born" } }
}
}
]
)
परिणाम:
{ "dateString" : "2020-12-31T23:30:15.123Z" }
यह उदाहरण %Y-%m-%dT%H:%M:%S.%LZ
का उपयोग करता है प्रारूप विनिर्देश के रूप में। यह डिफ़ॉल्ट प्रारूप विनिर्देश होता है, लेकिन इस मामले में हमने इसे स्पष्ट रूप से निर्दिष्ट किया है। हम देख सकते हैं कि निर्दिष्ट प्रारूप का उपयोग करके दिनांक स्ट्रिंग लौटा दी गई है।
यहाँ, मैंने dateString
. का प्रयोग किया है वापस जाने के लिए फ़ील्ड नाम के रूप में, लेकिन यह कुछ भी हो सकता था (जैसे formattedDate
, theDate
आदि)।
_id
MongoDB में अनुमानों का उपयोग करते समय फ़ील्ड डिफ़ॉल्ट रूप से लौटा दी जाती है, लेकिन इस उदाहरण में मैंने स्पष्ट रूप से _id
छुपाया है _id: 0
. का उपयोग करके फ़ील्ड ।
MongoDB देखें $dateToString
प्रारूप विनिर्देशकों की सूची के लिए प्रारूप विनिर्देशक उपलब्ध हैं।
डिफ़ॉल्ट आउटपुट
जैसा कि उल्लेख किया गया है, पिछले उदाहरण में प्रारूप विनिर्देश डिफ़ॉल्ट प्रारूप विनिर्देश है।
यदि आप featureCompatibilityVersion
के साथ MongoDB संस्करण 4.0 या इसके बाद के संस्करण का उपयोग कर रहे हैं 4.0
. पर सेट करें या उच्चतर (अपना वर्तमान featureCompatibilityVersion
देखने का तरीका देखें) और इसे कैसे सेट करें), यदि आप उपरोक्त प्रारूप का उपयोग करके दिनांक को प्रारूपित करना चाहते हैं, तो आप प्रारूप विनिर्देश को छोड़ सकते हैं।
इसलिए, हम पिछले को फिर से लिख सकते हैं। इसका उदाहरण:
db.pets.aggregate(
[
{
$project: {
_id: 0,
dateString: { $dateToString: { date: "$born" } }
}
}
]
)
परिणाम:
{ "dateString" : "2020-12-31T23:30:15.123Z" }
समयक्षेत्र निर्दिष्ट करें
आप $dateToString
. के आउटपुट के लिए उपयोग करने के लिए एक समय क्षेत्र निर्दिष्ट कर सकते हैं ऑपरेटर।
ओल्सन टाइमज़ोन पहचानकर्ता (उदा. "Europe/London"
का उपयोग करके समयक्षेत्र निर्दिष्ट किया जा सकता है , "GMT"
) या UTC ऑफ़सेट (उदा. "+02:30"
, "-1030"
)।
ओल्सन टाइमज़ोन आइडेंटिफ़ायर
यहां एक उदाहरण दिया गया है जो तीन अलग-अलग समय क्षेत्रों में दिनांक स्ट्रिंग को आउटपुट करता है, प्रत्येक ओल्सन टाइमज़ोन आईडी का उपयोग करता है:
db.pets.aggregate(
[
{
$project: {
_id: 0,
UTC: { $dateToString: { format: "%Y-%m-%dT%H:%M", date: "$born", timezone: "UTC" } },
Honolulu: { $dateToString: { format: "%Y-%m-%dT%H:%M", date: "$born", timezone: "Pacific/Honolulu" } },
Auckland: { $dateToString: { format: "%Y-%m-%dT%H:%M", date: "$born", timezone: "Pacific/Auckland" } }
}
}
]
).pretty()
परिणाम:
{ "UTC" : "2020-12-31T23:30", "Honolulu" : "2020-12-31T13:30", "Auckland" : "2021-01-01T12:30" }
UTC ऑफ़सेट
यहां एक उदाहरण दिया गया है जो यूटीसी ऑफ़सेट का उपयोग करता है।
db.pets.aggregate(
[
{
$project: {
_id: 0,
UTC: { $dateToString: { format: "%Y-%m-%dT%H:%M", date: "$born", timezone: "+00:00" } },
Honolulu: { $dateToString: { format: "%Y-%m-%dT%H:%M", date: "$born", timezone: "-10:00" } },
Auckland: { $dateToString: { format: "%Y-%m-%dT%H:%M", date: "$born", timezone: "+12:00" } }
}
}
]
).pretty()
परिणाम:
{ "UTC" : "2020-12-31T23:30", "Honolulu" : "2020-12-31T13:30", "Auckland" : "2021-01-01T11:30" }
ISO सप्ताह दिनांक प्रारूप
कुछ प्रारूप विनिर्देशक हैं जो आपको आईएसओ 8601 प्रारूप का उपयोग करके दिनांक स्ट्रिंग को आउटपुट करने में सक्षम बनाते हैं।
विशेष रूप से, आप इसका उपयोग कर सकते हैं:
प्रारूप विनिर्देशक | आउटपुट |
---|---|
%G | ISO 8601 प्रारूप में वर्ष |
%u | आईएसओ 8601 प्रारूप में सप्ताह का दिन संख्या (1-सोमवार, 7-रविवार) |
%V | वर्ष का सप्ताह ISO 8601 प्रारूप में |
मान लीजिए हमारे पास cats
. नामक संग्रह है निम्नलिखित दस्तावेज़ के साथ:
{ "_id" : ObjectId("6008c9a5c8eb4369cf6ad9cc"), "name" : "Scratch", "born" : ISODate("2021-01-03T23:30:15.123Z") }
हम born
. से ISO दिनांक फ़ील्ड निकालने के लिए निम्न कोड चला सकते हैं उस दस्तावेज़ में फ़ील्ड।
प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है:
db.cats.aggregate(
[
{
$project: {
_id: 0,
isoYear: { $dateToString: { format: "%G", date: "$born" } },
isoDayOfWeek: { $dateToString: { format: "%u", date: "$born" } },
isoWeekOfYear: { $dateToString: { format: "%V", date: "$born" } }
}
}
]
)
परिणाम:
{ "isoYear" : "2020", "isoDayOfWeek" : "7", "isoWeekOfYear" : "53" }
इसके विपरीत, नीचे वही उदाहरण दिया गया है, लेकिन गैर-आईएसओ सप्ताह दिनांक भागों का उपयोग किया जा रहा है।
db.cats.aggregate(
[
{
$project: {
_id: 0,
year: { $dateToString: { format: "%Y", date: "$born" } },
dayofweek: { $dateToString: { format: "%w", date: "$born" } },
weekofyear: { $dateToString: { format: "%U", date: "$born" } }
}
}
]
)
परिणाम:
{ "year" : "2021", "dayofweek" : "1", "weekofyear" : "01" }
हम देख सकते हैं कि परिणाम पूरी तरह से अलग है।
द onNull
पैरामीटर
onNull
पैरामीटर का उपयोग यह निर्दिष्ट करने के लिए किया जा सकता है कि यदि दिनांक शून्य है या मौजूद नहीं है तो क्या लौटाया जाए।
onNull
. को प्रदान किया गया मान पैरामीटर कोई भी मान्य व्यंजक हो सकता है।
यहां एक उदाहरण दिया गया है:
db.pets.aggregate(
[
{
$project: {
_id: 0,
dateString: { $dateToString: { date: null, onNull: "No date supplied" } }
}
}
]
)
परिणाम:
{ "dateString" : "No date supplied" }
इस मामले में, तारीख null
थी और इसलिए आउटपुट दस्तावेज़ में वह स्ट्रिंग शामिल है जो मैंने onNull
. के लिए प्रदान की थी पैरामीटर।
ऑब्जेक्ट आईडी से दिनांक भाग लौटाएं
आप $dateToString
. का उपयोग कर सकते हैं किसी ऑब्जेक्ट आईडी से दिनांक स्ट्रिंग वापस करने के लिए।
ObjectId मान 12 बाइट हेक्साडेसिमल मान होते हैं जिनमें निम्न शामिल होते हैं:
- ऑब्जेक्ट आईडी के निर्माण का प्रतिनिधित्व करने वाला 4 बाइट टाइमस्टैम्प मान, यूनिक्स युग के बाद से सेकंड में मापा जाता है।
- 5 बाइट एक यादृच्छिक मान है
- एक 3 बाइट इंक्रीमेंटिंग काउंटर, एक यादृच्छिक मान के लिए आरंभ किया गया।
संक्षेप में, हमारा पहला दस्तावेज़ इस तरह दिखता है:
{ "_id" : ObjectId("600631c7c8eb4369cf6ad9c8"), "name" : "Fetch", "born" : ISODate("2020-12-31T23:30:15.123Z") }
इस दस्तावेज़ में एक ObjectId है। इसलिए हम $dateToString
. का उपयोग कर सकते हैं हमारे दस्तावेज़ को बनाए जाने की तारीख के आधार पर दिनांक स्ट्रिंग वापस करने के लिए (या अधिक विशेष रूप से, जब _id
फ़ील्ड का ObjectId मान बनाया गया था)।
उदाहरण:
db.pets.aggregate(
[
{
$project: {
timestamp: { $toDate: "$_id" },
dateString: { $dateToString: { format: "%d-%m-%Y", date: "$_id" } }
}
}
]
).pretty()
परिणाम:
{ "_id" : ObjectId("600631c7c8eb4369cf6ad9c8"), "timestamp" : ISODate("2021-01-19T01:11:35Z"), "dateString" : "19-01-2021" }
इस मामले में, मैंने केवल दिनांक भाग (समय भाग नहीं) वापस करने का निर्णय लिया। मैंने यह प्रदर्शित करने के लिए दिनों, महीनों और वर्ष के क्रम को भी बदल दिया है कि यदि आवश्यक हो तो आप निश्चित रूप से ऐसा कर सकते हैं।
मैंने $toDate
. का भी इस्तेमाल किया ऑब्जेक्ट आईडी के टाइमस्टैम्प भाग को वापस करने के लिए एकत्रीकरण पाइपलाइन ऑपरेटर।