MongoDB में, $isoWeek
एग्रीगेशन पाइपलाइन ऑपरेटर 1
. से लेकर ISO 8601 प्रारूप में सप्ताह की संख्या लौटाता है करने के लिए 53
.
$isoWeek
. का उपयोग करते समय ऑपरेटर, आप वैकल्पिक रूप से परिणाम के लिए उपयोग करने के लिए एक समय क्षेत्र निर्दिष्ट कर सकते हैं।
$isoWeek
ऑपरेटर या तो एक तिथि स्वीकार करता है (या तो एक तिथि, एक टाइमस्टैम्प, या एक ऑब्जेक्ट आईडी के रूप में), या एक दस्तावेज जो उपयोग करने के लिए दिनांक और समय क्षेत्र निर्दिष्ट करता है।
उदाहरण
मान लीजिए हमारे पास cats
. नामक संग्रह है निम्नलिखित दस्तावेज़ के साथ:
{ "_id" : ObjectId("6008c9a5c8eb4369cf6ad9cc"), "name" : "Scratch", "born" : ISODate("2021-01-03T23:30:15.123Z") }
हम born
. से ISO सप्ताह निकालने के लिए निम्न कोड चला सकते हैं उस दस्तावेज़ में फ़ील्ड।
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthIsoWeek: { $isoWeek: "$born" }
}
}
]
)
परिणाम:
{ "birthIsoWeek" : 53 }
हम देख सकते हैं कि आईएसओ सप्ताह वास्तव में 53 है, भले ही तारीख जनवरी में हो। ऐसा इसलिए है क्योंकि सप्ताह पिछले वर्ष के अंत में शुरू हुआ था, और अभी तक समाप्त नहीं हुआ है। ISO सप्ताह इस प्रकार काम करते हैं।
यहां, मैंने birthIsoWeek
. का उपयोग किया है वापस जाने के लिए फ़ील्ड नाम के रूप में, लेकिन यह कुछ भी हो सकता था (जैसे isoWeek
, week
, आदि)।
_id
MongoDB में अनुमानों का उपयोग करते समय फ़ील्ड डिफ़ॉल्ट रूप से लौटा दी जाती है, लेकिन इस उदाहरण में मैंने स्पष्ट रूप से _id
छुपाया है _id: 0
. का उपयोग करके फ़ील्ड ।
समयक्षेत्र निर्दिष्ट करें
आप $isoWeek
. के आउटपुट के लिए उपयोग करने के लिए एक समय क्षेत्र निर्दिष्ट कर सकते हैं ऑपरेटर।
जब आप ऐसा करते हैं, तो तर्क $isoWeek
. को पास हो जाता है निम्नलिखित रूप का होना चाहिए:
{ date: <dateExpression>, timezone: <tzExpression> }
जहां <dateExpression>
उपयोग करने की तिथि है, और <tzExpression>
उपयोग करने के लिए समय क्षेत्र है।
ओल्सन टाइमज़ोन पहचानकर्ता (उदा. "Europe/London"
का उपयोग करके समयक्षेत्र निर्दिष्ट किया जा सकता है , "GMT"
) या UTC ऑफ़सेट (उदा. "+02:30"
, "-1030"
)।
ओल्सन टाइमज़ोन आइडेंटिफ़ायर
यहां एक उदाहरण दिया गया है जो आईएसओ सप्ताह को दो अलग-अलग समय क्षेत्रों में आउटपुट करता है, प्रत्येक ओल्सन टाइमज़ोन आईडी का उपयोग करता है:
db.cats.aggregate(
[
{
$project: {
_id: 0,
honolulu: {
$isoWeek: { date: "$born", timezone: "Pacific/Honolulu" }
},
auckland: {
$isoWeek: { date: "$born", timezone: "Pacific/Auckland" }
}
}
}
]
)
परिणाम:
{ "honolulu" : 53, "auckland" : 1 }
इस मामले में, Pacific/Auckland
का उपयोग करते समय दिनांक अगले ISO सप्ताह तक आगे बढ़ जाता है समयक्षेत्र।
UTC ऑफ़सेट
यहाँ वही उदाहरण है, इस समय को छोड़कर हम UTC ऑफ़सेट का उपयोग करते हैं।
db.cats.aggregate(
[
{
$project: {
_id: 0,
"utcOffset-1000": {
$isoWeek: { date: "$born", timezone: "-1000" }
},
"utcOffset+1200": {
$isoWeek: { date: "$born", timezone: "+1200" }
}
}
}
]
)
परिणाम:
{ "utcOffset-1000" : 53, "utcOffset+1200" : 1 }
ऑब्जेक्ट आईडी से आईएसओ वीक लौटाएं
आप $isoWeek
. का उपयोग कर सकते हैं ऑब्जेक्ट आईडी से आईएसओ सप्ताह के हिस्से को वापस करने के लिए।
ObjectId मान 12 बाइट हेक्साडेसिमल मान होते हैं जिनमें निम्न शामिल होते हैं:
- ऑब्जेक्ट आईडी के निर्माण का प्रतिनिधित्व करने वाला 4 बाइट टाइमस्टैम्प मान, यूनिक्स युग के बाद से सेकंड में मापा जाता है।
- 5 बाइट एक यादृच्छिक मान है
- एक 3 बाइट इंक्रीमेंटिंग काउंटर, एक यादृच्छिक मान के लिए आरंभ किया गया।
संक्षेप में, हमारा दस्तावेज़ इस तरह दिखता है:
{ "_id" : ObjectId("6008c9a5c8eb4369cf6ad9cc"), "name" : "Scratch", "born" : ISODate("2021-01-03T23:30:15.123Z") }
इस दस्तावेज़ में एक ObjectId है। इसलिए हम $isoWeek
. का उपयोग कर सकते हैं आईएसओ सप्ताह वापस करने के लिए कि हमारा दस्तावेज़ बनाया गया था (या अधिक विशेष रूप से, जब _id
फ़ील्ड का ObjectId मान बनाया गया था)।
उदाहरण:
db.cats.aggregate(
[
{
$project:
{
"timeStamp": { $toDate: "$_id"},
"isoWeek": { $isoWeek: "$_id" }
}
}
]
).pretty()
परिणाम:
{ "_id" : ObjectId("6008c9a5c8eb4369cf6ad9cc"), "timeStamp" : ISODate("2021-01-21T00:24:05Z"), "isoWeek" : 3 }
हम देख सकते हैं कि आईएसओ 8601 प्रारूप का उपयोग करते हुए दस्तावेज़ वर्ष के तीसरे सप्ताह में बनाया गया था।
इस मामले में, मैंने $toDate
. का भी उपयोग किया ऑब्जेक्ट आईडी के टाइमस्टैम्प हिस्से को वापस करने के लिए एकत्रीकरण पाइपलाइन ऑपरेटर।
आईएसओ सप्ताह क्या है?
आईएसओ सप्ताह तिथि प्रणाली एक कैलेंडर प्रणाली है जो अंतर्राष्ट्रीय मानकीकरण संगठन (आईएसओ) द्वारा जारी आईएसओ 8601 तिथि और समय मानक का हिस्सा है। सिस्टम ग्रेगोरियन कैलेंडर के शीर्ष पर एक सप्ताह वर्ष निर्दिष्ट करता है, जो वर्ष के क्रमिक सप्ताहों के लिए एक संकेतन को परिभाषित करता है।
ISO वीक-नंबरिंग वर्षों में या तो 52 या 53 पूर्ण सप्ताह होते हैं। इसका मतलब है कि साल में सामान्य 365 या 366 दिनों के बजाय या तो 364 या 371 दिन होते हैं।
आईएसओ सप्ताह सोमवार से शुरू होते हैं। प्रत्येक आईएसओ सप्ताह का वर्ष ग्रेगोरियन वर्ष होता है जिसमें गुरुवार पड़ता है। ISO सप्ताह संख्या 1
. से शुरू होती है उस सप्ताह के साथ जिसमें वर्ष का पहला गुरुवार शामिल है।