MongoDB में, $isoDayOfWeek
एग्रीगेशन पाइपलाइन ऑपरेटर 1
. से लेकर ISO 8601 प्रारूप में कार्यदिवस की संख्या लौटाता है (सोमवार के लिए) से 7
. तक (रविवार के लिए)।
आप परिणाम के लिए उपयोग करने के लिए वैकल्पिक रूप से एक समय क्षेत्र निर्दिष्ट कर सकते हैं।
$isoDayOfWeek
ऑपरेटर या तो एक तिथि (या तो एक तिथि, एक टाइमस्टैम्प, या एक ऑब्जेक्ट आईडी के रूप में) या एक दस्तावेज स्वीकार करता है जो उपयोग करने के लिए दिनांक और समय क्षेत्र निर्दिष्ट करता है।
उदाहरण
मान लीजिए हमारे पास pets
. नामक संग्रह है निम्नलिखित दस्तावेज़ के साथ:
{ "_id" : ObjectId("600631c7c8eb4369cf6ad9c8"), "name" : "Fetch", "born" : ISODate("2020-12-31T23:30:15.123Z") }
हम born
. से सप्ताह का ISO दिन निकालने के लिए निम्न कोड चला सकते हैं उस दस्तावेज़ में फ़ील्ड।
db.pets.aggregate(
[
{
$project:
{
_id: 0,
birthIsoDayOfWeek: { $isoDayOfWeek: "$born" }
}
}
]
)
परिणाम:
{ "birthIsoDayOfWeek" : 4 }
इस मामले में हमें 4 का परिणाम मिलता है, जो कि $dayOfWeek
का उपयोग करते समय मुझे मिलने वाले परिणाम से भिन्न होता है। एक ही दस्तावेज़ के खिलाफ ऑपरेटर।
यहाँ, मैंने birthIsoDayOfWeek
. का उपयोग किया है वापस जाने के लिए फ़ील्ड नाम के रूप में, लेकिन यह कुछ भी हो सकता था (जैसे isoDayOfWeek
, day
, आदि)।
_id
MongoDB में अनुमानों का उपयोग करते समय फ़ील्ड डिफ़ॉल्ट रूप से लौटा दी जाती है, लेकिन इस उदाहरण में मैंने स्पष्ट रूप से _id
छुपाया है _id: 0
. का उपयोग करके फ़ील्ड ।
समयक्षेत्र निर्दिष्ट करें
आप $isoDayOfWeek
. के आउटपुट के लिए उपयोग करने के लिए एक समय क्षेत्र निर्दिष्ट कर सकते हैं ऑपरेटर।
जब आप ऐसा करते हैं, तो तर्क $isoDayOfWeek
. को पास हो जाता है निम्नलिखित रूप का होना चाहिए:
{ date: <dateExpression>, timezone: <tzExpression> }
जहां <dateExpression>
उपयोग करने की तिथि है, और <tzExpression>
उपयोग करने के लिए समय क्षेत्र है।
ओल्सन टाइमज़ोन पहचानकर्ता (उदा. "Europe/London"
का उपयोग करके समयक्षेत्र निर्दिष्ट किया जा सकता है , "GMT"
) या UTC ऑफ़सेट (उदा. "+02:30"
, "-1030"
)।
ओल्सन टाइमज़ोन आइडेंटिफ़ायर
यहां एक उदाहरण दिया गया है जो दो अलग-अलग समय क्षेत्रों में दिन को आउटपुट करता है, प्रत्येक ओल्सन टाइमज़ोन आईडी का उपयोग करता है:
db.pets.aggregate(
[
{
$project: {
_id: 0,
honolulu: {
$isoDayOfWeek: { date: "$born", timezone: "Pacific/Honolulu" }
},
auckland: {
$isoDayOfWeek: { date: "$born", timezone: "Pacific/Auckland" }
}
}
}
]
)
परिणाम:
{ "honolulu" : 4, "auckland" : 5 }
UTC ऑफ़सेट
यहाँ वही उदाहरण है, इस समय को छोड़कर हम UTC ऑफ़सेट का उपयोग करते हैं।
db.pets.aggregate(
[
{
$project: {
_id: 0,
"utcOffset-1000": {
$isoDayOfWeek: { date: "$born", timezone: "-1000" }
},
"utcOffset+1200": {
$isoDayOfWeek: { date: "$born", timezone: "+1200" }
}
}
}
]
)
परिणाम:
{ "utcOffset-1000" : 4, "utcOffset+1200" : 5 }
ऑब्जेक्ट आईडी से सप्ताह का दिन लौटाएं
आप $isoDayOfWeek
. का उपयोग कर सकते हैं किसी ObjectId से ISO सप्ताह दिवस भाग वापस करने के लिए।
ObjectId मान 12 बाइट हेक्साडेसिमल मान होते हैं जिनमें निम्न शामिल होते हैं:
- ऑब्जेक्ट आईडी के निर्माण का प्रतिनिधित्व करने वाला 4 बाइट टाइमस्टैम्प मान, यूनिक्स युग के बाद से सेकंड में मापा जाता है।
- 5 बाइट एक यादृच्छिक मान है
- एक 3 बाइट इंक्रीमेंटिंग काउंटर, एक यादृच्छिक मान के लिए आरंभ किया गया।
संक्षेप में, हमारा दस्तावेज़ इस तरह दिखता है:
{ "_id" : ObjectId("600631c7c8eb4369cf6ad9c8"), "name" : "Fetch", "born" : ISODate("2020-12-31T23:30:15.123Z") }
इस दस्तावेज़ में एक ObjectId है। इसलिए हम $isoDayOfWeek
. का उपयोग कर सकते हैं सप्ताह का ISO दिन वापस करने के लिए जब हमारा दस्तावेज़ बनाया गया था (या अधिक विशेष रूप से, जब _id
फ़ील्ड का ObjectId मान बनाया गया था)।
उदाहरण:
db.pets.aggregate(
[
{
$project:
{
"timeStamp": { $toDate: "$_id"},
"isoDayOfWeek": { $isoDayOfWeek: "$_id" }
}
}
]
).pretty()
परिणाम:
{ "_id" : ObjectId("600631c7c8eb4369cf6ad9c8"), "timeStamp" : ISODate("2021-01-19T01:11:35Z"), "isoDayOfWeek" : 2 }
हम देख सकते हैं कि दस्तावेज़ सप्ताह के दूसरे दिन ISO 8601 प्रारूप का उपयोग करके बनाया गया था।
इस मामले में, मैंने $toDate
. का भी उपयोग किया ऑब्जेक्ट आईडी के टाइमस्टैम्प हिस्से को वापस करने के लिए एकत्रीकरण पाइपलाइन ऑपरेटर।