किसी तिथि से दिन निकालते समय, हम जिस सटीक विकल्प का उपयोग करते हैं, वह इस बात पर निर्भर करेगा कि हम उस दिन को किस प्रकार प्रदर्शित करना चाहते हैं।
उदाहरण के लिए, क्या हम सप्ताह का दिन, महीने का दिन या वर्ष का दिन चाहते हैं? या शायद हम इसे आईएसओ 8601 प्रारूप में चाहते हैं? हम जो चुनते हैं उसके आधार पर वापसी मूल्य आमतौर पर भिन्न होगा।
यह लेख उन विकल्पों की पड़ताल करता है, और इसलिए MongoDB में किसी तिथि से दिन के हिस्से को वापस करने के 8 तरीके प्रस्तुत करता है।
नमूना डेटा
मान लीजिए हमारे पास 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 . से दिन के हिस्से को वापस करने के लिए विभिन्न विकल्पों को प्रदर्शित करते हैं उन दस्तावेज़ों का क्षेत्र।
द $dayOfWeek संचालिका
जैसा कि नाम से ही स्पष्ट है, $dayOfWeek ऑपरेटर एक तारीख से सप्ताह का दिन लौटाता है।
हम सप्ताह के दिन को born . से वापस करने के लिए निम्नलिखित कोड चला सकते हैं उपरोक्त दस्तावेज़ में फ़ील्ड।
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthDayOfWeek: { $dayOfWeek: "$born" }
}
}
]
) परिणाम:
{ "birthDayOfWeek" : 1 }
{ "birthDayOfWeek" : 1 }
{ "birthDayOfWeek" : 5 }
$dayOfWeek . का उपयोग करते समय समय क्षेत्र निर्दिष्ट करना भी संभव है ऑपरेटर।
MongoDB देखें $dayOfWeek अधिक जानकारी और उदाहरणों के लिए।
द $dayOfMonth संचालिका
$dayOfMonth ऑपरेटर एक तारीख से महीने का दिन लौटाता है।
उदाहरण:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthDayOfMonth: { $dayOfMonth: "$born" }
}
}
]
) परिणाम:
{ "birthDayOfMonth" : 3 }
{ "birthDayOfMonth" : 8 }
{ "birthDayOfMonth" : 24 }
$dayOfMonth . का उपयोग करते समय आप समय क्षेत्र भी निर्दिष्ट कर सकते हैं ऑपरेटर।
MongoDB देखें $dayOfMonth अधिक जानकारी और उदाहरणों के लिए।
द $dayOfYear संचालिका
हाँ, आपने अनुमान लगाया। $dayOfYear ऑपरेटर एक तारीख से वर्ष का दिन लौटाता है।
उदाहरण:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthDayOfYear: { $dayOfYear: "$born" }
}
}
]
) परिणाम:
{ "birthDayOfYear" : 3 }
{ "birthDayOfYear" : 342 }
{ "birthDayOfYear" : 268 }
$dayOfYear ऑपरेटर एक टाइमज़ोन पैरामीटर भी स्वीकार करता है।
MongoDB देखें $dayOfYear अधिक जानकारी और उदाहरणों के लिए।
$dateToString संचालिका
$dateToString ऑपरेटर उपयोगकर्ता द्वारा निर्दिष्ट प्रारूप के अनुसार दिनांक ऑब्जेक्ट को स्ट्रिंग में परिवर्तित करता है। इसलिए उपयोगकर्ता निर्दिष्ट कर सकता है कि यदि आवश्यक हो तो केवल दिन का हिस्सा लौटाया जाता है।
प्रत्येक दिनांक भाग के लिए प्रारूप विनिर्देशक हैं, और जब दिन भाग की बात आती है, तो आपके पास प्रारूप विनिर्देशक का एक विकल्प होता है जो इस बात पर निर्भर करेगा कि आप सप्ताह का दिन, महीने का दिन, वर्ष का दिन, या सप्ताह का दिन आईएसओ 8601 प्रारूप में।
उदाहरण:
db.cats.aggregate(
[
{
$project: {
_id: 0,
birthDayOfWeek: { $dateToString: { format: "%w", date: "$born" } },
birthDayOfMonth: { $dateToString: { format: "%d", date: "$born" } },
birthDayOfYear: { $dateToString: { format: "%j", date: "$born" } },
birthDayOfWeekISO: { $dateToString: { format: "%u", date: "$born" } }
}
}
]
).pretty() परिणाम:
{
"birthDayOfWeek" : "1",
"birthDayOfMonth" : "03",
"birthDayOfYear" : "003",
"birthDayOfWeekISO" : "7"
}
{
"birthDayOfWeek" : "1",
"birthDayOfMonth" : "08",
"birthDayOfYear" : "342",
"birthDayOfWeekISO" : "7"
}
{
"birthDayOfWeek" : "5",
"birthDayOfMonth" : "24",
"birthDayOfYear" : "268",
"birthDayOfWeekISO" : "4"
} हम परिणाम में अन्य दिनांक भागों को शामिल करने के लिए अधिक प्रारूप विनिर्देशक प्रदान कर सकते थे, लेकिन यह देखते हुए कि हम केवल इस लेख में दिन निकालने में रुचि रखते हैं, हमने केवल दिन के हिस्से को वापस करने के लिए प्रारूप विनिर्देशक का उपयोग किया।
MongoDB देखें $dateToString अधिक जानकारी और उदाहरणों के लिए।
MongoDB $dateToString भी देखें प्रारूप विनिर्देशकों की सूची के लिए प्रारूप विनिर्देशक जिनका उपयोग आप $dateToString के साथ कर सकते हैं ।
$dateToParts संचालिका
$dateToParts ऑपरेटर एक दस्तावेज़ देता है जिसमें किसी दिए गए बीएसओएन दिनांक मान के घटक भाग अलग-अलग गुणों के रूप में होते हैं। लौटाए गए गुण year हैं , month , day , hour , minute , second और millisecond ।
इसलिए हम $dateToParts . का उपयोग कर सकते हैं एक पाइपलाइन चरण में, फिर दूसरा पाइपलाइन चरण जोड़ें जो day . को निकालता है यदि आवश्यक हो तो भाग।
यहाँ क्या है $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
}
}
इस डेटा को केवल day . निकालने के लिए पाइपलाइन के अगले चरण में भेजा जा सकता है फ़ील्ड.
अगर हम केवल day . के लिए एक और प्रक्षेपण जोड़ते हैं तो यहां क्या होता है फ़ील्ड:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
dateParts: { $dateToParts: { date: "$born" } }
}
},
{
$project:
{
birthDay: "$dateParts.day"
}
}
]
) परिणाम:
{ "birthDay" : 3 }
{ "birthDay" : 8 }
{ "birthDay" : 24 } यह स्पष्ट रूप से पिछले विकल्पों का उपयोग करने जैसा संक्षिप्त नहीं है। हालांकि, आप अपनी पाइपलाइन में क्या कर रहे हैं, इस पर निर्भर करते हुए, यह दृष्टिकोण एक विकल्प हो सकता है।
यह भी उल्लेखनीय है कि $dateToParts एक iso8601 स्वीकार करता है पैरामीटर, जो आउटपुट दस्तावेज़ को ISO सप्ताह दिनांक फ़ील्ड का उपयोग करने के लिए संशोधित करता है।
MongoDB देखें $dateToParts अधिक जानकारी और उदाहरणों के लिए।
द forEach() विधि
आप cursor.forEach() . का उपयोग कर सकते हैं कर्सर के माध्यम से पुनरावृति करने के लिए, केवल दिन का मान वापस करने के लिए JavaScript पद्धति का उपयोग करना।
db.cats.find().forEach(
function(c) {
print(
c.born.getDay()
);
}
); परिणाम:
1 0 4
इस मामले में, हम जावास्क्रिप्ट का उपयोग करते हैं getDay() विधि, जो स्थानीय समय के अनुसार, दी गई तिथि के लिए सप्ताह के दिन के अनुरूप 0 और 6 के बीच एक पूर्णांक संख्या लौटाती है।
एक अन्य विकल्प getUTCDay() . का उपयोग करना है विधि, जो सार्वभौमिक समय का उपयोग करती है। हम अगले उदाहरण में इस पद्धति का उपयोग करेंगे।
वैकल्पिक रूप से, हम जावास्क्रिप्ट का उपयोग कर सकते थे getDate() विधि, जो 1 और 31 के बीच एक पूर्णांक संख्या लौटाती है, जो दी गई तारीख के लिए महीने के दिन का प्रतिनिधित्व करती है।
साथ ही, यह विकल्प केवल वास्तविक दिन का मान देता है, न कि संपूर्ण दस्तावेज़, जैसे पिछले उदाहरणों में।
द map() विधि
cursor.map() विधि कर्सर द्वारा देखे गए प्रत्येक दस्तावेज़ पर एक फ़ंक्शन लागू करती है और मानों को एक सरणी में जोड़ती है।
उदाहरण:
db.cats.find().map(
function(c) {
c = c.born.getUTCDay();
return c;
}
); परिणाम:
[ 0, 0, 4 ]
जैसा कि उल्लेख किया गया है, जावास्क्रिप्ट getUTCDay() विधि सार्वभौमिक समय का उपयोग करके अपना परिणाम लौटाती है। इस मामले में, इसके परिणामस्वरूप पहले दस्तावेज़ के लिए एक अलग मान लौटाया गया (हमें 0 . मिला इस उदाहरण में, बनाम 1 पिछले एक में)।
द $isoDayOfWeek संचालिका
यदि आपको सप्ताह के दिन को ISO 8601 प्रारूप में वापस करना है, तो आप $isoDayOfWeek का उपयोग कर सकते हैं . ISO 8601 वर्ष 1 सप्ताह के सोमवार से शुरू होता है और अंतिम सप्ताह के रविवार को समाप्त होता है।
उदाहरण:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthIsoDayOfWeek: { $isoDayOfWeek: "$born" }
}
}
]
) परिणाम:
{ "birthIsoDayOfWeek" : 7 }
{ "birthIsoDayOfWeek" : 7 }
{ "birthIsoDayOfWeek" : 4 }
इस मामले में हमें $dayOfWeek . का उपयोग करते समय मिले परिणाम से बिल्कुल अलग परिणाम मिलता है ऑपरेटर, जिस तरह से आईएसओ 8601 तारीखों की गणना करता है।
यहां एक उदाहरण दिया गया है जो इस अंतर को प्रदर्शित करता है:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthDayOfWeek: { $dayOfWeek: "$born" },
birthIsoDayOfWeek: { $isoDayOfWeek: "$born" }
}
}
]
) परिणाम:
{ "birthDayOfWeek" : 1, "birthIsoDayOfWeek" : 7 }
{ "birthDayOfWeek" : 1, "birthIsoDayOfWeek" : 7 }
{ "birthDayOfWeek" : 5, "birthIsoDayOfWeek" : 4 }