MongoDB Tutorials

تحويل التواريخ بكفاءة في MongoDB

Spread the love

تُعد إدارة التواريخ بكفاءة داخل قاعدة بيانات MongoDB الخاصة بك أمرًا بالغ الأهمية للدقة في الاستعلام والفرز. ومع ذلك، غالبًا ما تؤدي عملية إدخال البيانات إلى تخزين التواريخ كسلاسل نصية بدلاً من نوع Date الأمثل. تُفصّل هذه المقالة عدة طرق لتحويل هذه التمثيلات النصية إلى كائنات MongoDB Date الصحيحة، مما يحسّن أداء قاعدة البيانات وسلامة البيانات.

جدول المحتويات:

إنشاء أنواع بيانات التاريخ والسلسلة النصية

إن فهم كيفية إنشاء مستندات تحتوي على كل من أنواع بيانات التاريخ والسلسلة النصية أمر ضروري. يوضح هذا القسم المشكلة ويمهد الطريق لحلول التحويل.

باستخدام 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 حلاً فعالاً ونظيفاً.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *