MongoDB तिथियों के साथ काम करने के लिए एकत्रीकरण पाइपलाइन ऑपरेटरों की एक अच्छी श्रृंखला प्रदान करता है, जिसमें वे ऑपरेटर भी शामिल हैं जो तारीखों के कुछ हिस्सों को निकालते हैं, जैसे कि वर्ष, महीना, दिन, घंटे, मिनट, आदि।
कुछ MongoDB विधियाँ भी हैं जो आपको एक कर्सर के माध्यम से पुनरावृति करने में सक्षम बनाती हैं, और एक जावास्क्रिप्ट फ़ंक्शन लागू करती हैं। इसलिए आप आवश्यकतानुसार किसी फ़ील्ड से दिनांक मान और दिनांक भाग आदि निकालने के लिए जावास्क्रिप्ट का उपयोग कर सकते हैं।
यह लेख MongoDB में दिनांक वस्तु से घंटे के हिस्से को वापस करने के 5 तरीके प्रस्तुत करता है।
नमूना डेटा
मान लीजिए हमारे पास 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 . से घंटे के हिस्से को वापस करने के लिए विभिन्न विकल्पों को प्रदर्शित करते हैं उन दस्तावेज़ों का क्षेत्र।
$hour संचालिका
$hour ऑपरेटर को विशेष रूप से किसी दिए गए दिनांक के घंटे के हिस्से के साथ एक दस्तावेज़ वापस करने के लिए डिज़ाइन किया गया है।
हम born . से घंटे के हिस्से को वापस करने के लिए निम्नलिखित कोड चला सकते हैं उपरोक्त दस्तावेज़ में फ़ील्ड।
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthHour: { $hour: "$born" }
}
}
]
) परिणाम:
{ "birthHour" : 23 }
{ "birthHour" : 4 }
{ "birthHour" : 10 }
$hour . का उपयोग करते समय आप समय क्षेत्र भी निर्दिष्ट कर सकते हैं ऑपरेटर।
देखें MongoDB $hour अधिक जानकारी और उदाहरणों के लिए।
$dateToString संचालिका
$dateToString ऑपरेटर उपयोगकर्ता द्वारा निर्दिष्ट प्रारूप के अनुसार दिनांक ऑब्जेक्ट को स्ट्रिंग में परिवर्तित करता है। इसलिए उपयोगकर्ता निर्दिष्ट कर सकता है कि यदि आवश्यक हो तो केवल घंटे का हिस्सा लौटाया जाता है।
प्रत्येक दिनांक भाग के लिए प्रारूप विनिर्देशक हैं। %H प्रारूप विनिर्देशक घंटा लौटाता है।
उदाहरण:
db.cats.aggregate(
[
{
$project: {
_id: 0,
birthHour: { $dateToString: { format: "%H", date: "$born" } }
}
}
]
) परिणाम:
{ "birthHour" : "23" }
{ "birthHour" : "04" }
{ "birthHour" : "10" } हम परिणाम में दिनांक भागों को शामिल करने के लिए अधिक प्रारूप विनिर्देशक प्रदान कर सकते थे, लेकिन यह देखते हुए कि हम इस लेख में केवल घंटे निकालने में रुचि रखते हैं, हमने केवल एक प्रारूप विनिर्देशक का उपयोग किया है।
MongoDB देखें $dateToString अधिक जानकारी और उदाहरणों के लिए।
$dateToParts संचालिका
$dateToParts ऑपरेटर एक दस्तावेज़ देता है जिसमें किसी दिए गए बीएसओएन दिनांक मान के घटक भाग अलग-अलग गुणों के रूप में होते हैं। लौटाए गए गुण year हैं , month , day , hour , minute , second और millisecond ।
इसलिए हम $dateToParts . का उपयोग कर सकते हैं एक पाइपलाइन चरण में, फिर दूसरा पाइपलाइन चरण जोड़ें जो hour . को निकालता है भाग।
यहाँ क्या है $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
}
}
इसके बाद इस परिणाम को केवल hour . निकालने के लिए पाइपलाइन के अगले चरण में भेजा जा सकता है फ़ील्ड.
अगर हम केवल hour . के लिए एक और प्रक्षेपण जोड़ते हैं तो यहां क्या होता है फ़ील्ड:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
dateParts: { $dateToParts: { date: "$born" } }
}
},
{
$project:
{
birthHour: "$dateParts.hour"
}
}
]
) परिणाम:
{ "birthHour" : 23 }
{ "birthHour" : 4 }
{ "birthHour" : 10 }
यहां बात यह है कि यदि आप $dateToParts . का उपयोग करते हैं तो आपकी पाइपलाइन में, आपके पास अगले चरण में स्वचालित रूप से घंटे के हिस्से (और अन्य सभी भाग) तक पहुंच है।
MongoDB देखें $dateToParts अधिक जानकारी और उदाहरणों के लिए।
द forEach() विधि
आप cursor.forEach() . का उपयोग कर सकते हैं getHours() . जैसी JavaScript पद्धति का उपयोग करके कर्सर के माध्यम से पुनरावृति करने के लिए या getUTCHours() केवल घंटे का मान लौटाने के लिए।
db.cats.find().forEach(
function(c) {
print(
c.born.getUTCHours()
);
}
); परिणाम:
23 4 10
getUTCHours() जावास्क्रिप्ट विधि 0 और 23 के बीच एक पूर्णांक देता है, जो सार्वभौमिक समय के अनुसार दी गई तिथि में घंटों का प्रतिनिधित्व करता है।
आप यह भी देख सकते हैं कि पिछले विकल्प एक संपूर्ण दस्तावेज़ लौटाते हैं जिसमें एक नाम/मूल्य जोड़ी होती है, जबकि यह विकल्प केवल वास्तविक घंटे का मान देता है, न कि संपूर्ण दस्तावेज़।
map() विधि
cursor.map() विधि कर्सर द्वारा देखे गए प्रत्येक दस्तावेज़ पर एक फ़ंक्शन लागू करती है और मानों को एक सरणी में जोड़ती है।
उदाहरण:
db.cats.find().map(
function(c) {
c = c.born.getHours();
return c;
}
); परिणाम:
[ 9, 14, 20 ]
आपने देखा होगा कि परिणामी घंटे पिछले उदाहरणों से भिन्न हैं। ऐसा इसलिए है क्योंकि इस उदाहरण में मैंने getHours() . का उपयोग किया है जावास्क्रिप्ट विधि। यह विधि स्थानीय समय के अनुसार अपना परिणाम देती है। मैं उतनी ही आसानी से getUTCHours() . का उपयोग कर सकता था ।