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

मोंगोडीबी $dateFromString

MongoDB में, $dateFromString एग्रीगेशन पाइपलाइन ऑपरेटर दिनांक/समय स्ट्रिंग को दिनांक ऑब्जेक्ट में कनवर्ट करता है।

उदाहरण

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

{ "_id" : 1, "bar" : "2020-12-31T23:30:25.123" }
{ "_id" : 2, "bar" : "2020-12-31" }
{ "_id" : 3, "bar" : "2020-12-31T23:30" }

सभी दस्तावेज़ों में दिनांक/समय स्ट्रिंग होती है।

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

db.foo.aggregate([ 
  {
    $project: {
        date: {
          $dateFromString: {
              dateString: '$bar'
          }
        }
    }
  } 
])

परिणाम:

{ "_id" : 1, "date" : ISODate("2020-12-31T23:30:25.123Z") }
{ "_id" : 2, "date" : ISODate("2020-12-31T00:00:00Z") }
{ "_id" : 3, "date" : ISODate("2020-12-31T23:30:00Z") }

सभी दिनांक/समय स्ट्रिंग को दिनांक वस्तु में बदल दिया गया है।

मैंने फ़ील्ड का नाम bar . से भी बदल दिया है से date . तक ।

एक प्रारूप निर्दिष्ट करें

आप एक वैकल्पिक format प्रदान कर सकते हैं प्रदान की जा रही दिनांक/समय स्ट्रिंग के प्रारूप को निर्दिष्ट करने के लिए तर्क। प्रारूप विनिर्देश कोई भी स्ट्रिंग शाब्दिक हो सकता है, जिसमें 0 या अधिक प्रारूप विनिर्देशक होते हैं।

format पैरामीटर MongoDB संस्करण 4.0 से उपलब्ध है।

डिफ़ॉल्ट प्रारूप %Y-%m-%dT%H:%M:%S.%LZ है , जो कि पिछले उदाहरण का उपयोग करता है।

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

{ "_id" : 4, "bar" : "07/08/2020" }

इस मामले में, दिनांक 8वें महीने का 7वां दिन या 7वें महीने का 8वां दिन हो सकता है, यह इस बात पर निर्भर करता है कि किस स्थान का उपयोग किया जा रहा है।

हम यह निर्दिष्ट करने के लिए प्रारूप विनिर्देश का उपयोग कर सकते हैं कि यह कौन सा होना चाहिए।

उदाहरण:

db.foo.aggregate([ 
  { $match: { _id: 4 } },
  {
    $project: {
        date: {
          $dateFromString: {
              dateString: '$bar',
              format: "%m/%d/%Y"
          }
        }
    }
  } 
])

परिणाम:

{ "_id" : 4, "date" : ISODate("2020-07-08T00:00:00Z") }

इस मामले में, हमने निर्दिष्ट किया है कि यह 7वें महीने का 8वां दिन है।

यहाँ यह फिर से है, लेकिन इस बार हम दिन और महीने की अदला-बदली करते हैं।

db.foo.aggregate([ 
  { $match: { _id: 4 } },
  {
    $project: {
        date: {
          $dateFromString: {
              dateString: '$bar',
              format: "%d/%m/%Y"
          }
        }
    }
  } 
])

परिणाम:

{ "_id" : 4, "date" : ISODate("2020-08-07T00:00:00Z") }

इस बार इसे 8वें महीने के 7वें दिन के रूप में व्याख्यायित किया गया है।

MongoDB देखें $dateFromString मान्य प्रारूप विनिर्देशों की सूची के लिए प्रारूप विनिर्देशक।

ISO सप्ताह दिनांक प्रारूप

कुछ प्रारूप विनिर्देशक हैं जो आपको आईएसओ 8601 प्रारूप का उपयोग करके तिथियां निर्दिष्ट करने में सक्षम बनाते हैं।

विशेष रूप से, आप इसका उपयोग कर सकते हैं:

प्रारूप विनिर्देशक आउटपुट
%G ISO 8601 प्रारूप में वर्ष
%u आईएसओ 8601 प्रारूप में सप्ताह का दिन संख्या (1-सोमवार, 7-रविवार)
%V वर्ष का सप्ताह ISO 8601 प्रारूप में

मान लीजिए हमारे पास ऐसा दस्तावेज़ है जो इस तरह दिखता है:

{ "_id" : 5, "bar" : "7-8-2020" }

हम उस तारीख को ISO सप्ताह के 7वें दिन के रूप में समझ सकते हैं, उसके बाद वर्ष का 8वां ISO सप्ताह, उसके बाद वर्ष।

इस तरह:

db.foo.aggregate([ 
  { $match: { _id: 5 } },
  {
    $project: {
        date: {
          $dateFromString: {
              dateString: '$bar',
              format: "%u-%V-%G"
          }
        }
    }
  } 
])

परिणाम:

{ "_id" : 5, "date" : ISODate("2020-02-23T00:00:00Z") }

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

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

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

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

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

db.foo.aggregate([ 
  { $match: { _id: 1 } },
  {
    $project: {
        utc: {
          $dateFromString: {
              dateString: '$bar',
              timezone: "UTC"
          }
        },
        honolulu: {
          $dateFromString: {
              dateString: '$bar',
              timezone: "Pacific/Honolulu"
          }
        },
        auckland: {
          $dateFromString: {
              dateString: '$bar',
              timezone: "Pacific/Auckland"
          }
        }
    }
  } 
]).pretty()

परिणाम:

{
	"_id" : 1,
	"utc" : ISODate("2020-12-31T23:30:25.123Z"),
	"honolulu" : ISODate("2021-01-01T09:30:25.123Z"),
	"auckland" : ISODate("2020-12-31T10:30:25.123Z")
}

UTC ऑफ़सेट

यहां एक उदाहरण दिया गया है जो यूटीसी ऑफ़सेट का उपयोग करता है।

db.foo.aggregate([ 
  { $match: { _id: 1 } },
  {
    $project: {
        "date+00:00": {
          $dateFromString: {
              dateString: '$bar',
              timezone: "+00:00"
          }
        },
        "date-10:00": {
          $dateFromString: {
              dateString: '$bar',
              timezone: "-10:00"
          }
        },
        "date+12:00": {
          $dateFromString: {
              dateString: '$bar',
              timezone: "+12:00"
          }
        }
    }
  } 
]).pretty()

परिणाम:

{
	"_id" : 1,
	"date+00:00" : ISODate("2020-12-31T23:30:25.123Z"),
	"date-10:00" : ISODate("2021-01-01T09:30:25.123Z"),
	"date+12:00" : ISODate("2020-12-31T11:30:25.123Z")
}

यदि आप timezone का उपयोग करते हैं पैरामीटर, ज़ुलु समय (UTC टाइमज़ोन) को इंगित करने के लिए दिनांक स्ट्रिंग को Z के साथ नहीं जोड़ा जा सकता है। उदाहरण के लिए, दिनांक स्ट्रिंग 2020-12-31T23:30:25.123Z नहीं हो सकती टाइमज़ोन पैरामीटर का उपयोग करते समय।

साथ ही, टाइमज़ोन पैरामीटर का उपयोग करते समय दिनांक स्ट्रिंग में टाइमज़ोन जानकारी शामिल न करें।

onNull पैरामीटर

onNull पैरामीटर का उपयोग यह निर्दिष्ट करने के लिए किया जा सकता है कि यदि दिनांक शून्य है या मौजूद नहीं है तो क्या लौटाया जाए।

onNull . को प्रदान किया गया मान पैरामीटर कोई भी मान्य व्यंजक हो सकता है।

मान लीजिए हमारे पास इस तरह का एक दस्तावेज़ है:

{ "_id" : 6, "bar" : null }

हम onNull . का उपयोग कर सकते हैं निम्नलिखित तरीके से:

db.foo.aggregate([ 
  { $match: { _id: 6 } },
  {
    $project: {
        date: {
          $dateFromString: {
              dateString: '$bar',
              onNull: "No valid date was supplied"
          }
        }
    }
  } 
])

परिणाम:

{ "_id" : 6, "date" : "No valid date was supplied" }

इस मामले में, तारीख null थी और इसलिए आउटपुट दस्तावेज़ में वह स्ट्रिंग शामिल है जो मैंने onNull . के लिए प्रदान की थी पैरामीटर।

onError पैरामीटर

आप वैकल्पिक रूप से onError . का उपयोग कर सकते हैं त्रुटि होने की स्थिति में आउटपुट के लिए एक अभिव्यक्ति प्रदान करने के लिए पैरामीटर।

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

{ "_id" : 7, "bar" : "21st Dec, 2030" }

भले ही bar . में एक तारीख हो फ़ील्ड, यह मान्य दिनांक/समय स्ट्रिंग नहीं है, और इसलिए यदि हम dateFromString का उपयोग करते हैं तो यह एक त्रुटि उत्पन्न करेगा इसे दिनांक वस्तु में बदलने का प्रयास करने के लिए।

त्रुटि का उदाहरण:

db.foo.aggregate([ 
  { $match: { _id: 7 } },
  {
    $project: {
        date: {
          $dateFromString: {
              dateString: '$bar'
          }
        }
    }
  } 
])

परिणाम:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "an incomplete date/time string has been found, with elements missing: \"21st Dec, 2030\"",
	"code" : 241,
	"codeName" : "ConversionFailure"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:618:17
[email protected]/mongo/shell/assert.js:708:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1046:12
@(shell):1:1

यह देखने में बहुत खराब त्रुटि है।

हम onError . का उपयोग कर सकते हैं इसे अच्छे दिखने के लिए पैरामीटर:

db.foo.aggregate([ 
  { $match: { _id: 7 } },
  {
    $project: {
        date: {
          $dateFromString: {
              dateString: '$bar',
              onError: "An error occurred while parsing the date string"
          }
        }
    }
  } 
])

परिणाम:

{ "_id" : 7, "date" : "An error occurred while parsing the date string" }

onNull के रूप में देखा जा रहा है और onError पैरामीटर हमें वास्तविक दस्तावेज़ों को वापस करने की अनुमति देते हैं, वे हमें एक से अधिक दस्तावेज़ वापस करने की अनुमति देते हैं, बिना एक खराब दस्तावेज़ के पूरे ऑपरेशन को रोकने की चिंता किए बिना।

उदाहरण:

db.foo.aggregate([ 
  {
    $project: {
        date: {
          $dateFromString: {
              dateString: '$bar',
              onNull: "The date was either empty or null",
              onError: "An error occurred while parsing the date string"
          }
        }
    }
  } 
])

परिणाम:

{ "_id" : 1, "date" : ISODate("2020-12-31T23:30:25.123Z") }
{ "_id" : 2, "date" : ISODate("2020-12-31T00:00:00Z") }
{ "_id" : 3, "date" : ISODate("2020-12-31T23:30:00Z") }
{ "_id" : 4, "date" : ISODate("2020-07-08T00:00:00Z") }
{ "_id" : 5, "date" : ISODate("2020-08-07T00:00:00Z") }
{ "_id" : 6, "date" : "The date was either empty or null" }
{ "_id" : 7, "date" : "An error occurred while parsing the date string" }


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. एक नेवला मॉडल को उस फ़ील्ड के साथ पॉप्युलेट करें जो एक आईडी नहीं है

  2. स्थानीय मोंगो डीबी शुरू/लॉन्च करने में असमर्थ

  3. संपत्ति मौजूद होने पर नेवला मॉडल की hasOwnProperty झूठी वापसी क्यों करती है?

  4. मोंगोडीबी $atan

  5. मोंगोडीबी के लाभ | मोंगोडीबी के नुकसान