अपने MongoDB डेटाबेस में तिथियों का कुशलतापूर्वक प्रबंधन सटीक क्वेरी और सॉर्टिंग के लिए महत्वपूर्ण है। हालाँकि, डेटा अंतर्ग्रहण अक्सर इष्टतम Date
प्रकार के बजाय स्ट्रिंग के रूप में संग्रहीत तिथियों का परिणाम देता है। यह लेख इन स्ट्रिंग निरूपणों को उचित MongoDB Date
ऑब्जेक्ट में बदलने के कई तरीकों का विवरण देता है, जिससे आपके डेटाबेस के प्रदर्शन और डेटा अखंडता में सुधार होता है।
विषयसूची:
- दिनांक और स्ट्रिंग डेटा प्रकार बनाना
- MongoDB में स्ट्रिंग को तिथियों में बदलना
$toDate
ऑपरेटर का उपयोग करना$convert
ऑपरेटर का उपयोग करनाdateFromString
ऑपरेटर का उपयोग करना (अप्रचलित)- इन-प्लेस अपडेट के लिए
$set
ऑपरेटर का उपयोग करना - टाइमस्टैम्प के लिए
$clockTime
का उपयोग करना
दिनांक और स्ट्रिंग डेटा प्रकार बनाना
स्ट्रिंग और दिनांक डेटा प्रकार दोनों के साथ दस्तावेज़ कैसे बनाएँ, यह समझना आवश्यक है। यह खंड समस्या को स्पष्ट करता है और रूपांतरण समाधानों के लिए मंच तैयार करता है।
MongoDB शेल का उपयोग करना:
// स्ट्रिंग दिनांक के साथ एक दस्तावेज़ सम्मिलित करना
db.myCollection.insertOne({
_id: 1,
dateString: "2024-10-27"
});
// एक उचित दिनांक ऑब्जेक्ट के साथ एक दस्तावेज़ सम्मिलित करना
db.myCollection.insertOne({
_id: 2,
dateObject: ISODate("2024-10-27T00:00:00Z")
});
यहाँ, dateString
दिनांक को स्ट्रिंग के रूप में संग्रहीत करता है, जबकि dateObject
सही ISODate
प्रारूप का उपयोग करता है। हमारा लक्ष्य dateString
को dateObject
के तुलनीय प्रारूप में बदलना है।
MongoDB में स्ट्रिंग को तिथियों में बदलना
कई MongoDB ऑपरेटर इस रूपांतरण की सुविधा प्रदान करते हैं। इष्टतम विकल्प आपकी विशिष्ट आवश्यकताओं और आपके स्ट्रिंग तिथियों के प्रारूप पर निर्भर करता है।
$toDate
ऑपरेटर का उपयोग करना
$toDate
ऑपरेटर सबसे सरल और सबसे अनुशंसित दृष्टिकोण है। यह एक दिनांक स्ट्रिंग लेता है और एक Date
ऑब्जेक्ट देता है। इनपुट स्ट्रिंग को एक पहचानने योग्य दिनांक प्रारूप (जैसे, ISO 8601) का पालन करना चाहिए।
db.myCollection.aggregate([
{
$project: {
_id: 1,
convertedDate: { $toDate: "$dateString" }
}
}
]);
यह एग्रीगेशन पाइपलाइन dateString
को Date
ऑब्जेक्ट में बदल देती है, इसे convertedDate
में संग्रहीत करती है। यदि स्ट्रिंग अमान्य है, तो $toDate
null
देता है।
$convert
ऑपरेटर का उपयोग करना
$convert
ऑपरेटर अधिक लचीलापन प्रदान करता है, इनपुट और आउटपुट प्रकारों का स्पष्ट विनिर्देशन की अनुमति देता है। यह कम मानक दिनांक स्ट्रिंग प्रारूपों के लिए मूल्यवान है।
db.myCollection.aggregate([
{
$project: {
_id: 1,
convertedDate: {
$convert: {
input: "$dateString",
to: "date",
onError: null,
onNull: null
}
}
}
}
]);
onError
और onNull
क्रमशः रूपांतरण त्रुटियों और शून्य मानों को संभालते हैं। उन्हें null
पर सेट करने से विफलता पर null
वापस आता है।
dateFromString
ऑपरेटर का उपयोग करना (अप्रचलित)
जबकि पहले उपलब्ध था, dateFromString
अप्रचलित है। बेहतर संगतता के लिए $toDate
या $convert
का उपयोग करें।
इन-प्लेस अपडेट के लिए $set
ऑपरेटर का उपयोग करना
update
विधि के साथ उपयोग किया जाने वाला $set
ऑपरेटर, मौजूदा दस्तावेज़ों को सीधे संशोधित करता है।
db.myCollection.updateMany(
{},
{ $set: { dateObject: { $toDate: "$dateString" } } }
);
यह सभी दस्तावेज़ों को अपडेट करता है, परिवर्तित तिथि के साथ एक dateObject
फ़ील्ड जोड़ता है। मूल dateString
रहता है। सावधानी बरतें, क्योंकि यह सीधे दस्तावेज़ों को बदल देता है।
टाइमस्टैम्प के लिए $clockTime
का उपयोग करना
$clockTime
प्रत्यक्ष स्ट्रिंग-टू-डेट रूपांतरण के लिए नहीं है, लेकिन विशिष्ट परिदृश्यों के लिए उपयोगी है। यह वर्तमान सर्वर समय को BSON टाइमस्टैम्प के रूप में प्रदान करता है। यह तब प्रासंगिक है जब मौजूदा स्ट्रिंग तिथियों को परिवर्तित करने के बजाय वर्तमान सर्वर समय के आधार पर टाइमस्टैम्प जोड़ा जा रहा हो।
हमेशा अपने डेटा को सत्यापित करें और स्ट्रिंग-टू-डेट रूपांतरण के दौरान संभावित त्रुटियों को संभालें। अपने डेटा और एप्लिकेशन की आवश्यकताओं के लिए सबसे उपयुक्त विधि चुनें। अधिकांश मामलों में, $toDate
कुशल और स्वच्छ समाधान है।