MongoDB तिथियों के साथ काम करने के लिए काफी कुछ एकत्रीकरण पाइपलाइन ऑपरेटर प्रदान करता है। इसमें वे ऑपरेटर शामिल हैं जो तारीखों के कुछ हिस्सों को निकालते हैं, जैसे कि वर्ष, महीना, दिन, आदि।
कुछ MongoDB विधियाँ भी हैं जो आपको एक कर्सर के माध्यम से पुनरावृति करने में सक्षम बनाती हैं, और एक जावास्क्रिप्ट फ़ंक्शन लागू करती हैं। इसलिए यह आपको किसी फ़ील्ड से दिनांक मान और दिनांक भाग आदि निकालने के लिए जावास्क्रिप्ट का उपयोग करने की अनुमति देता है।
यह लेख MongoDB में किसी तिथि से वर्ष के हिस्से को वापस करने के 6 तरीके प्रस्तुत करता है।
नमूना डेटा
मान लीजिए हमारे पास cats
. नामक संग्रह है निम्नलिखित दस्तावेजों के साथ:
{ "_id" : 1, "name" : "Scratch", "born" : ISODate("2021-01-03T23:30:15.123Z") } { "_id" : 2, "name" : "Meow", "born" : ISODate("2019-12-08T04:00:12Z") } { "_id" : 3, "name" : "Fluffy", "born" : ISODate("2020-09-24T10:30:00Z") }
निम्नलिखित उदाहरण born
. से वर्ष के हिस्से को वापस करने के लिए विभिन्न विकल्पों को प्रदर्शित करते हैं उन दस्तावेज़ों का क्षेत्र।
$year
संचालिका
$year
किसी तिथि से वर्ष के भाग को निकालने के लिए ऑपरेटर सबसे स्पष्ट विकल्प है। यह विशेष रूप से किसी दिनांक के वर्ष भाग वाले दस्तावेज़ को वापस करने के लिए डिज़ाइन किया गया है।
हम born
. से वर्ष वापस करने के लिए निम्नलिखित कोड चला सकते हैं उपरोक्त दस्तावेज़ में फ़ील्ड।
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthYear: { $year: "$born" }
}
}
]
)
परिणाम:
{ "birthYear" : 2021 } { "birthYear" : 2019 } { "birthYear" : 2020 }
$year
. का उपयोग करते समय आप समय क्षेत्र भी निर्दिष्ट कर सकते हैं ऑपरेटर।
MongoDB देखें $year
अधिक जानकारी और उदाहरणों के लिए।
$dateToString
संचालिका
$dateToString
ऑपरेटर उपयोगकर्ता द्वारा निर्दिष्ट प्रारूप के अनुसार दिनांक ऑब्जेक्ट को स्ट्रिंग में परिवर्तित करता है। इसलिए उपयोगकर्ता निर्दिष्ट कर सकता है कि यदि आवश्यक हो तो केवल वर्ष का हिस्सा लौटाया जाता है।
प्रत्येक दिनांक भाग के लिए प्रारूप विनिर्देशक हैं। %Y
प्रारूप विनिर्देशक वर्ष लौटाता है।
उदाहरण:
db.cats.aggregate(
[
{
$project: {
_id: 0,
birthYear: { $dateToString: { format: "%Y", date: "$born" } }
}
}
]
)
परिणाम:
{ "birthYear" : "2021" } { "birthYear" : "2019" } { "birthYear" : "2020" }
हम परिणाम में दिनांक भागों को शामिल करने के लिए अधिक प्रारूप विनिर्देशक प्रदान कर सकते थे, लेकिन यह देखते हुए कि हम केवल इस लेख में वर्ष निकालने में रुचि रखते हैं, हमने केवल एक प्रारूप विनिर्देशक का उपयोग किया है।
MongoDB देखें $dateToString
अधिक जानकारी और उदाहरणों के लिए।
$dateToParts
संचालिका
$dateToParts
ऑपरेटर एक दस्तावेज़ देता है जिसमें किसी दिए गए बीएसओएन दिनांक मान के घटक भाग अलग-अलग गुणों के रूप में होते हैं। लौटाए गए गुण year
हैं , month
, day
, hour
, minute
, second
और millisecond
।
इस ज्ञान के साथ, हम $dateToParts
. का उपयोग कर सकते हैं एक पाइपलाइन चरण में, फिर दूसरा पाइपलाइन चरण जोड़ें जो year
. को निकालता है भाग।
यहाँ क्या है $dateToParts
हमारे तीन दस्तावेज़ों के लिए रिटर्न:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
dateParts: { $dateToParts: { date: "$born" } }
}
}
]
).pretty()
परिणाम:
{ "dateParts" : { "year" : 2021, "month" : 1, "day" : 3, "hour" : 23, "minute" : 30, "second" : 15, "millisecond" : 123 } } { "dateParts" : { "year" : 2019, "month" : 12, "day" : 8, "hour" : 4, "minute" : 0, "second" : 12, "millisecond" : 0 } } { "dateParts" : { "year" : 2020, "month" : 9, "day" : 24, "hour" : 10, "minute" : 30, "second" : 0, "millisecond" : 0 } }
इस डेटा को केवल year
. निकालने के लिए पाइपलाइन के अगले चरण में भेजा जा सकता है फ़ील्ड.
अगर हम केवल year
. के लिए एक और प्रक्षेपण जोड़ते हैं तो यहां क्या होता है फ़ील्ड:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
dateParts: { $dateToParts: { date: "$born" } }
}
},
{
$project:
{
birthYear: "$dateParts.year"
}
}
]
)
परिणाम:
{ "birthYear" : 2021 } { "birthYear" : 2019 } { "birthYear" : 2020 }
यह स्पष्ट रूप से पिछले विकल्पों का उपयोग करने जैसा संक्षिप्त नहीं है। हालाँकि, आप अपनी पाइपलाइन में क्या कर रहे हैं, इस पर निर्भर करते हुए, यह दृष्टिकोण एक आसान विकल्प हो सकता है।
$dateToParts
ऑपरेटर एक iso8601
भी स्वीकार करता है पैरामीटर, जो आउटपुट दस्तावेज़ को ISO सप्ताह दिनांक फ़ील्ड का उपयोग करने के लिए संशोधित करता है।
MongoDB देखें $dateToParts
अधिक जानकारी और उदाहरणों के लिए।
द forEach()
विधि
आप cursor.forEach()
. का उपयोग कर सकते हैं जावास्क्रिप्ट विधि जैसे getFullYear()
. का उपयोग करके कर्सर के माध्यम से पुनरावृति करने के लिए या getUTCFullYear()
केवल वर्ष का मान लौटाने के लिए।
db.cats.find().forEach(
function(c) {
print(
c.born.getFullYear()
);
}
);
परिणाम:
2021 2019 2020
पिछले विकल्प एक संपूर्ण दस्तावेज़ लौटाते हैं जिसमें एक नाम/मान युग्म होता है। यह विकल्प केवल वास्तविक वर्ष मान देता है, न कि संपूर्ण दस्तावेज़।
map()
विधि
cursor.map()
विधि कर्सर द्वारा देखे गए प्रत्येक दस्तावेज़ पर एक फ़ंक्शन लागू करती है और मानों को एक सरणी में जोड़ती है।
उदाहरण:
db.cats.find().map(
function(c) {
c = c.born.getFullYear();
return c;
}
);
परिणाम:
[ 2021, 2019, 2020 ]
द $isoWeekYear
संचालिका
यदि आपको आईएसओ 8601 प्रारूप में वर्ष वापस करने की आवश्यकता है, तो $isoWeekYear
का उपयोग करें . ISO 8601 वर्ष 1 सप्ताह के सोमवार से शुरू होता है और अंतिम सप्ताह के रविवार को समाप्त होता है।
उदाहरण:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthIsoWeekYear: { $isoWeekYear: "$born" }
}
}
]
)
परिणाम:
{ "birthIsoWeekYear" : NumberLong(2020) } { "birthIsoWeekYear" : NumberLong(2019) } { "birthIsoWeekYear" : NumberLong(2020) }
ध्यान दें कि पिछले उदाहरणों की तरह पहला वर्ष अब 2021 के बजाय 2020 है। $isoWeekYear
. का उपयोग करते समय सभी वर्ष अलग नहीं होंगे , क्योंकि यह विचाराधीन तारीख पर निर्भर करता है।