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