MongoDB में, $dateFromParts
एकत्रीकरण पाइपलाइन ऑपरेटर दिनांक के घटक भागों से दिनांक वस्तु का निर्माण और रिटर्न करता है।
आप प्रत्येक दिनांक भाग को एक अलग फ़ील्ड के रूप में प्रदान करते हैं।
यदि आवश्यक हो तो आप आईएसओ सप्ताह दिनांक प्रारूप में अपने घटक दिनांक फ़ील्ड निर्दिष्ट कर सकते हैं।
उदाहरण
मान लीजिए हमारे पास dateParts
. नामक संग्रह है निम्नलिखित दस्तावेज़ के साथ:
{ "_id" : 1, "year" : 2020, "month" : 12, "day" : 31, "hour" : 23, "minute" : 30, "second" : 25, "millisecond" : 123 }
दस्तावेज़ में प्रत्येक दिनांक भाग के लिए एक अलग फ़ील्ड है।
हम उन दस्तावेज़ों में फ़ील्ड से दिनांक ऑब्जेक्ट वापस करने के लिए निम्न कोड चला सकते हैं।
db.dateParts.aggregate([
{
$project: {
date: {
$dateFromParts: {
"year": "$year",
"month": "$month",
"day": "$day",
"hour": "$hour",
"minute": "$minute",
"second": "$second",
"millisecond": "$millisecond"
}
}
}
}])
परिणाम:
{ "_id" : 1, "date" : ISODate("2020-12-31T23:30:25.123Z") }
सभी दिनांक/समय भागों को एक दिनांक वस्तु में बदल दिया गया है।
समय क्षेत्र
आप timezone
. का उपयोग कर सकते हैं समय क्षेत्र निर्दिष्ट करने के लिए फ़ील्ड।
ओल्सन टाइमज़ोन पहचानकर्ता (उदा. "Europe/London"
का उपयोग करके समयक्षेत्र निर्दिष्ट किया जा सकता है , "GMT"
) या UTC ऑफ़सेट (उदा. "+02:30"
, "-1030"
)।
ओल्सन टाइमज़ोन आइडेंटिफ़ायर
यहां एक उदाहरण दिया गया है जो तीन अलग-अलग समय क्षेत्रों के आधार पर एक ही दस्तावेज़ से तीन अलग-अलग तिथियों को आउटपुट करने के लिए ओल्सन टाइमज़ोन आईडी का उपयोग करता है।
db.dateParts.aggregate([
{
$project: {
dateUTC: {
$dateFromParts: {
"year": "$year",
"month": "$month",
"day": "$day",
"hour": "$hour",
"minute": "$minute",
"second": "$second",
"millisecond": "$millisecond",
"timezone": "Pacific/Auckland"
}
},
dateHonolulu: {
$dateFromParts: {
"year": "$year",
"month": "$month",
"day": "$day",
"hour": "$hour",
"minute": "$minute",
"second": "$second",
"millisecond": "$millisecond",
"timezone": "Pacific/Honolulu"
}
},
dateAuckland: {
$dateFromParts: {
"year": "$year",
"month": "$month",
"day": "$day",
"hour": "$hour",
"minute": "$minute",
"second": "$second",
"millisecond": "$millisecond",
"timezone": "Pacific/Auckland"
}
}
}
}]).pretty()
परिणाम:
{ "_id" : 1, "dateUTC" : ISODate("2020-12-31T10:30:25.123Z"), "dateHonolulu" : ISODate("2021-01-01T09:30:25.123Z"), "dateAuckland" : ISODate("2020-12-31T10:30:25.123Z") }
UTC ऑफ़सेट
यहां एक उदाहरण दिया गया है जो यूटीसी ऑफ़सेट का उपयोग करता है।
db.dateParts.aggregate([
{
$project: {
"date+00:00": {
$dateFromParts: {
"year": "$year",
"month": "$month",
"day": "$day",
"hour": "$hour",
"minute": "$minute",
"second": "$second",
"millisecond": "$millisecond",
"timezone": "+00:00"
}
},
"date-10:00": {
$dateFromParts: {
"year": "$year",
"month": "$month",
"day": "$day",
"hour": "$hour",
"minute": "$minute",
"second": "$second",
"millisecond": "$millisecond",
"timezone": "-10:00"
}
},
"date+12:00": {
$dateFromParts: {
"year": "$year",
"month": "$month",
"day": "$day",
"hour": "$hour",
"minute": "$minute",
"second": "$second",
"millisecond": "$millisecond",
"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") }
ISO सप्ताह दिनांक प्रारूप
यदि आवश्यक हो तो दिनांक भागों को ISO 8601 प्रारूप का उपयोग करके निर्दिष्ट किया जा सकता है।
विशेष रूप से, आप इसका उपयोग कर सकते हैं:
प्रारूप विनिर्देशक | आउटपुट |
---|---|
isoWeekYear | ISO 8601 प्रारूप में वर्ष। यदि year . का उपयोग नहीं कर रहे हैं तो यह फ़ील्ड आवश्यक है (और year isoWeekYear . का उपयोग न करने पर आवश्यक है ) |
isoWeek | वर्ष का सप्ताह ISO 8601 प्रारूप में। केवल isoWeekYear . के साथ उपयोग किया जा सकता है । |
isoDayOfWeek | सप्ताह का दिन (1-सोमवार, 7-रविवार)। केवल isoWeekYear . के साथ उपयोग किया जा सकता है । |
मान लीजिए हम एक दूसरा दस्तावेज़ सम्मिलित करते हैं जो इस तरह दिखता है:
{ "_id" : 2, "isoWeekYear" : 2021, "isoWeek" : 32, "isoDayOfWeek" : 7, "hour" : 23, "minute" : 30, "second" : 25, "millisecond" : 123, "timezone" : "UTC" }
हम देख सकते हैं कि यह isoWeekYear
. का उपयोग करता है , isoWeek
, और isoDayOfWeek
year
. के बजाय , month
, और day
(जो पहला दस्तावेज़ उपयोग करता है)।
हम इस दस्तावेज़ से दिनांक वस्तु बनाने के लिए निम्नलिखित कोड का उपयोग कर सकते हैं:
db.dateParts.aggregate([
{ $match: { _id: 2} },
{
$project: {
date: {
$dateFromParts: {
"isoWeekYear": "$isoWeekYear",
"isoWeek": "$isoWeek",
"isoDayOfWeek": "$isoDayOfWeek",
"hour": "$hour",
"minute": "$minute",
"second": "$second",
"millisecond": "$millisecond",
"timezone": "$timezone"
}
}
}
}
])
परिणाम:
{ "_id" : 2, "date" : ISODate("2021-08-15T23:30:25.123Z") }
सीमा क्षेत्र से बाहर
MongoDB 4.4 में प्रारंभ, year
. के लिए समर्थित मान श्रेणी और isoWeekYear
है 1-9999
. पिछले संस्करणों में, इन मानों के लिए निचली सीमा 0
. थी और समर्थित मान श्रेणी 0-9999
. थी ।
MongoDB 4.0 में प्रारंभ, यदि year
. के अलावा अन्य फ़ील्ड के लिए निर्दिष्ट मान , isoWeekYear
, और timezone
मान्य सीमा से बाहर है, $dateFromParts
दिनांक की गणना करने के लिए ऑपरेटर अन्य दिनांक भागों से अंतर को वहन या घटाता है।
मान सीमा से अधिक है
मान लीजिए हम अपने संग्रह में निम्नलिखित दस्तावेज़ जोड़ते हैं:
{ "_id" : 3, "year" : 2020, "month" : 14, "day" : 65, "hour" : 48, "minute" : 130, "second" : 625, "millisecond" : 123 }
इस दस्तावेज़ में कई दिनांक और समय फ़ील्ड उनकी संबंधित मान्य सीमाओं से अधिक हैं।
आइए इसे डेट ऑब्जेक्ट में बदलने के लिए निम्न कमांड चलाएँ:
db.dateParts.aggregate([
{ $match: { _id: 3} },
{
$project: {
date: {
$dateFromParts: {
"year": "$year",
"month": "$month",
"day": "$day",
"hour": "$hour",
"minute": "$minute",
"second": "$second",
"millisecond": "$millisecond"
}
}
}
}
])
परिणाम:
{ "_id" : 3, "date" : ISODate("2021-04-08T02:20:25.123Z") }
हम देख सकते हैं कि परिणामी दिनांक वस्तु में दिनांक भाग दस्तावेज़ में उनके संबंधित दिनांक भागों से भिन्न हैं। ऐसा इसलिए है क्योंकि $dateFromParts
दिनांक भाग मानों के लिए खाते की तिथि की पुनर्गणना की गई जो उनकी सामान्य सीमा से अधिक थी।
मान सीमा से कम
मान लीजिए हम अपने संग्रह में निम्नलिखित दस्तावेज़ जोड़ते हैं:
{ "_id" : 4, "year" : 2020, "month" : 0, "day" : 0, "hour" : 0, "minute" : 0, "second" : 0, "millisecond" : 0 }
इस दस्तावेज़ में कई दिनांक और समय फ़ील्ड उनकी संबंधित मान्य सीमाओं से कम हैं।
आइए इसे डेट ऑब्जेक्ट में बदलने के लिए निम्न कमांड चलाएँ:
db.dateParts.aggregate([
{ $match: { _id: 4} },
{
$project: {
date: {
$dateFromParts: {
"year": "$year",
"month": "$month",
"day": "$day",
"hour": "$hour",
"minute": "$minute",
"second": "$second",
"millisecond": "$millisecond"
}
}
}
}
])
परिणाम:
{ "_id" : 4, "date" : ISODate("2019-11-30T00:00:00Z") }