تُعد إدارة التواريخ بكفاءة داخل قاعدة بيانات MongoDB الخاصة بك أمرًا بالغ الأهمية للدقة في الاستعلام والفرز. ومع ذلك، غالبًا ما تؤدي عملية إدخال البيانات إلى تخزين التواريخ كسلاسل نصية بدلاً من نوع Date
الأمثل. تُفصّل هذه المقالة عدة طرق لتحويل هذه التمثيلات النصية إلى كائنات MongoDB Date
الصحيحة، مما يحسّن أداء قاعدة البيانات وسلامة البيانات.
جدول المحتويات:
- إنشاء أنواع بيانات التاريخ والسلسلة النصية
- تحويل السلاسل النصية إلى تواريخ في MongoDB
- استخدام عامل التشغيل
$toDate
- استخدام عامل التشغيل
$convert
- استخدام عامل التشغيل
dateFromString
(مُهمل) - استخدام عامل التشغيل
$set
للتحديثات في الموقع - استخدام
$clockTime
للطوابع الزمنية
إنشاء أنواع بيانات التاريخ والسلسلة النصية
إن فهم كيفية إنشاء مستندات تحتوي على كل من أنواع بيانات التاريخ والسلسلة النصية أمر ضروري. يوضح هذا القسم المشكلة ويمهد الطريق لحلول التحويل.
باستخدام MongoDB Shell:
// إدخال مستند مع تاريخ نصي
db.myCollection.insertOne({
_id: 1,
dateString: "2024-10-27"
});
// إدخال مستند مع كائن Date صحيح
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
للتحديثات في الموقع
يُعدّل عامل التشغيل $set
، المستخدم مع طريقة update
، المستندات الموجودة مباشرةً.
db.myCollection.updateMany(
{},
{ $set: { dateObject: { $toDate: "$dateString" } } }
);
يُحدّث هذا جميع المستندات، مضيفًا حقل dateObject
مع التاريخ المُحوّل. يبقى dateString
الأصلي. توخ الحذر، حيث يُغيّر هذا المستندات مباشرةً.
استخدام $clockTime
للطوابع الزمنية
لا يُستخدم $clockTime
لتحويل السلسلة النصية إلى التاريخ مباشرةً، ولكنه مفيد في سيناريوهات محددة. يُوفر وقت الخادم الحالي كطابع زمني BSON. هذا ذو صلة عند إضافة طابع زمني بناءً على وقت الخادم الحالي، وليس تحويل تواريخ السلسلة النصية الموجودة.
دائماً ما قم بالتحقق من صحة بياناتك ومعالجة الأخطاء المحتملة أثناء تحويل السلسلة النصية إلى التاريخ. اختر الطريقة الأنسب لبياناتك واحتياجات تطبيقك. في معظم الحالات، يُعد $toDate
حلاً فعالاً ونظيفاً.