MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

मोंगोडीबी $isoWeekYear

MongoDB में, $isoWeekYear एग्रीगेशन पाइपलाइन ऑपरेटर किसी दिए गए दिनांक मान के लिए ISO वीक-नंबरिंग वर्ष लौटाता है। यह आईएसओ 8601 प्रारूप में वर्ष की संख्या है।

$isoWeekYear . का उपयोग करते समय ऑपरेटर, आप वैकल्पिक रूप से परिणाम के लिए उपयोग करने के लिए एक समय क्षेत्र निर्दिष्ट कर सकते हैं।

$isoWeekYear ऑपरेटर या तो एक तिथि स्वीकार करता है (या तो एक तिथि, एक टाइमस्टैम्प, या एक ऑब्जेक्ट आईडी के रूप में), या एक दस्तावेज जो उपयोग करने के लिए दिनांक और समय क्षेत्र निर्दिष्ट करता है।

उदाहरण

मान लीजिए हमारे पास cats . नामक संग्रह है निम्नलिखित दस्तावेज़ के साथ:

{
	"_id" : ObjectId("6008c9a5c8eb4369cf6ad9cc"),
	"name" : "Scratch",
	"born" : ISODate("2021-01-03T23:30:15.123Z")
}

हम born . से ISO वर्ष निकालने के लिए निम्न कोड चला सकते हैं उस दस्तावेज़ में फ़ील्ड।

db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          birthIsoWeekYear: { $isoWeekYear: "$born" }
        }
    }
  ]
)

परिणाम:

{ "birthIsoWeekYear" : NumberLong(2020) } 

हम देख सकते हैं कि आईएसओ वर्ष वास्तव में 2020 है, भले ही तारीख 2021 निर्दिष्ट करती है। ऐसा इसलिए है क्योंकि आईएसओ वर्ष अंतिम सप्ताह समाप्त होने तक समाप्त नहीं होता है। और इस मामले में, सप्ताह पिछले वर्ष के अंत में शुरू हुआ, और अभी तक समाप्त नहीं हुआ है। इस प्रकार ISO वर्ष काम करते हैं।

यहाँ, मैंने birthIsoWeekYear . का उपयोग किया है वापस जाने के लिए फ़ील्ड नाम के रूप में, लेकिन यह कुछ भी हो सकता था (जैसे isoWeekYear , isoYear , आदि)।

_id MongoDB में अनुमानों का उपयोग करते समय फ़ील्ड डिफ़ॉल्ट रूप से लौटा दी जाती है, लेकिन इस उदाहरण में मैंने स्पष्ट रूप से _id छुपाया है _id: 0 . का उपयोग करके फ़ील्ड ।

समयक्षेत्र निर्दिष्ट करें

आप $isoWeekYear . के आउटपुट के लिए उपयोग करने के लिए एक समय क्षेत्र निर्दिष्ट कर सकते हैं ऑपरेटर।

जब आप ऐसा करते हैं, तो तर्क $isoWeekYear . को पास हो जाता है निम्नलिखित रूप का होना चाहिए:

{ date: <dateExpression>, timezone: <tzExpression> }

जहां <dateExpression> उपयोग करने की तिथि है, और <tzExpression> उपयोग करने के लिए समय क्षेत्र है।

ओल्सन टाइमज़ोन पहचानकर्ता (उदा. "Europe/London" का उपयोग करके समयक्षेत्र निर्दिष्ट किया जा सकता है , "GMT" ) या UTC ऑफ़सेट (उदा. "+02:30" , "-1030" )।

ओल्सन टाइमज़ोन आइडेंटिफ़ायर

यहां एक उदाहरण दिया गया है जो दो अलग-अलग समय क्षेत्रों में आईएसओ वर्ष को आउटपुट करता है, प्रत्येक ओल्सन टाइमज़ोन आईडी का उपयोग करता है:

db.cats.aggregate(
  [
    {
      $project: {
          _id: 0,
          honolulu: { 
            $isoWeekYear: { date: "$born", timezone: "Pacific/Honolulu" }
            },
          auckland: { 
            $isoWeekYear: { date: "$born", timezone: "Pacific/Auckland" }
            }
        }
    }
  ]
)

परिणाम:

{ "honolulu" : NumberLong(2020), "auckland" : NumberLong(2021) } 

इस मामले में, Pacific/Auckland का उपयोग करते समय दिनांक अगले ISO वर्ष की ओर बढ़ जाता है समयक्षेत्र।

UTC ऑफ़सेट

यहाँ वही उदाहरण है, इस समय को छोड़कर हम UTC ऑफ़सेट का उपयोग करते हैं।

db.cats.aggregate(
  [
    {
      $project: {
          _id: 0,
          "utcOffset-1000": { 
            $isoWeekYear: { date: "$born", timezone: "-1000" }
            },
          "utcOffset+1200": { 
            $isoWeekYear: { date: "$born", timezone: "+1200" }
            }
        }
    }
  ]
)

परिणाम:

{ "utcOffset-1000" : NumberLong(2020), "utcOffset+1200" : NumberLong(2021) } 

ऑब्जेक्ट आईडी से आईएसओ वर्ष लौटाएं

आप $isoWeekYear . का उपयोग कर सकते हैं किसी ObjectId से ISO वर्ष के हिस्से को वापस करने के लिए।

ObjectId मान 12 बाइट हेक्साडेसिमल मान होते हैं जिनमें निम्न शामिल होते हैं:

  • ऑब्जेक्ट आईडी के निर्माण का प्रतिनिधित्व करने वाला 4 बाइट टाइमस्टैम्प मान, यूनिक्स युग के बाद से सेकंड में मापा जाता है।
  • 5 बाइट एक यादृच्छिक मान है
  • एक 3 बाइट इंक्रीमेंटिंग काउंटर, एक यादृच्छिक मान के लिए आरंभ किया गया।

संक्षेप में, हमारा दस्तावेज़ इस तरह दिखता है:

{
	"_id" : ObjectId("6008c9a5c8eb4369cf6ad9cc"),
	"name" : "Scratch",
	"born" : ISODate("2021-01-03T23:30:15.123Z")
}

इस दस्तावेज़ में एक ObjectId है। इसलिए हम $isoWeekYear . का उपयोग कर सकते हैं आईएसओ वर्ष वापस करने के लिए कि हमारा दस्तावेज़ बनाया गया था (या अधिक विशेष रूप से, जब _id फ़ील्ड का ObjectId मान बनाया गया था)।

उदाहरण:

db.cats.aggregate(
  [
    {
      $project:
        {
          "timeStamp": { $toDate: "$_id"},
          "isoWeekYear": { $isoWeekYear: "$_id" }
        }
    }
  ]
).pretty()

परिणाम:

{
	"_id" : ObjectId("6008c9a5c8eb4369cf6ad9cc"),
	"timeStamp" : ISODate("2021-01-21T00:24:05Z"),
	"isoWeekYear" : NumberLong(2021)
}

हम देख सकते हैं कि दस्तावेज़ ISO वर्ष 2021 में बनाया गया था।

इस मामले में, मैंने $toDate . का भी उपयोग किया ऑब्जेक्ट आईडी के टाइमस्टैम्प भाग को वापस करने के लिए एकत्रीकरण पाइपलाइन ऑपरेटर।

आईएसओ वीक डेट सिस्टम के बारे में

आईएसओ सप्ताह तिथि प्रणाली एक कैलेंडर प्रणाली है जो अंतर्राष्ट्रीय मानकीकरण संगठन (आईएसओ) द्वारा जारी आईएसओ 8601 तिथि और समय मानक का हिस्सा है। सिस्टम ग्रेगोरियन कैलेंडर के शीर्ष पर एक सप्ताह वर्ष निर्दिष्ट करता है, जो वर्ष के क्रमिक सप्ताहों के लिए एक संकेतन को परिभाषित करता है।

ISO वीक-नंबरिंग वर्षों में या तो 52 या 53 पूर्ण सप्ताह होते हैं। इसका मतलब है कि साल में सामान्य 365 या 366 दिनों के बजाय या तो 364 या 371 दिन होते हैं।

आईएसओ सप्ताह सोमवार से शुरू होते हैं। प्रत्येक आईएसओ सप्ताह का वर्ष ग्रेगोरियन वर्ष होता है जिसमें गुरुवार पड़ता है। ISO सप्ताह संख्या 1 . से शुरू होती है उस सप्ताह के साथ जिसमें वर्ष का पहला गुरुवार शामिल है।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Android ऐप्स में MongoDB स्टिच का उपयोग कैसे करें

  2. MongoDB दस्तावेज़ से किसी फ़ील्ड को पूरी तरह से कैसे हटाएं?

  3. रिमोट सर्वर से मोंगोडम्प

  4. dockerized mongo पर डेटा इनिशियलाइज़ करें

  5. MongoDb योग क्वेरी