MongoDB Tutorials

إتقان مقارنات الحقول في MongoDB

Spread the love

توفر MongoDB، وهي قاعدة بيانات وثائق NoSQL، طرقًا متعددة لمقارنة الحقول داخل الوثائق أو عبر وثائق متعددة. يستعرض هذا الدليل هذه التقنيات، بما يلبي مستويات المهارة وحالات الاستخدام المختلفة.

محتويات

استخدام لغة الاستعلام في MongoDB

أبسط نهج يتضمن استخدام لغة الاستعلام في MongoDB ضمن رمز تطبيقك. هذا يقوم مباشرةً بتصفية الوثائق بناءً على مقارنات الحقول.

ضع في اعتبارك مجموعة products:


[
  { "_id" : ObjectId("..."), "price" : 10, "discount" : 5 },
  { "_id" : ObjectId("..."), "price" : 20, "discount" : 2 },
  { "_id" : ObjectId("..."), "price" : 30, "discount" : 0 }
]

للعثور على المنتجات حيث price > discount، لن تعمل المقارنة المباشرة داخل عامل التشغيل. بدلاً من ذلك، استخدم عامل التشغيل $expr:


db.products.find( { $expr: { $gt: [ "$price", "$discount" ] } } )

يُمكّن $expr تقييم تعبيرات خط أنابيب التجميع داخل مرحلة الاستعلام، وهو أمر بالغ الأهمية لمقارنات الحقول داخل الوثيقة.

إطار التجميع لمقارنة الحقول

يوفر إطار التجميع طريقة قوية ومرنة، خاصةً للمقارنات أو الحسابات المعقدة. يسمح بمنطق وتحويلات متطورة قبل التصفية.

للعثور على المنتجات وحساب السعر النهائي بعد الخصم:


db.products.aggregate([
  {
    $project: {
      _id: 1,
      price: 1,
      discount: 1,
      finalPrice: { $subtract: [ "$price", "$discount" ] }
    }
  },
  {
    $match: {
      finalPrice: { $gt: 15 }
    }
  }
])

يقوم هذا الخط بأنابيب بإنشاء finalPrice ثم يقوم بالتصفية بناءً عليه.

استخدام واجهة سطر الأوامر Mongo Shell لمقارنة الحقول

توفر واجهة سطر الأوامر Mongo Shell بيئة تفاعلية لاختبار الاستعلامات والتجميعات. تعمل الطرق المذكورة أعلاه مباشرةً داخل واجهة سطر الأوامر.


> db.products.find( { $expr: { $gt: [ "$price", "$discount" ] } } )

تقنيات المقارنة المتقدمة

تتطلب مقارنة الحقول عبر الوثائق التجميع باستخدام $lookup أو $group لربط الوثائق قبل المقارنة. يتطلب التعامل مع أنواع البيانات المختلفة ضمان التوافق ؛ قد تكون هناك حاجة إلى تحويل صريح للنوع.

اعتبارات الأداء

بينما يضيف $expr عبئًا إضافيًا، إلا أنه غالبًا ما يكون ضروريًا. بالنسبة لمجموعات البيانات الكبيرة، يظل تحسين الاستعلامات أمرًا بالغ الأهمية. يؤدي فهرسة الحقول ذات الصلة إلى تحسين الأداء بشكل كبير.

الخلاصة

توفر MongoDB طرقًا مختلفة لمقارنة الحقول. لغة الاستعلام مع $expr مناسبة لمقارنات بسيطة داخل الوثيقة، بينما يبرز إطار التجميع في السيناريوهات والحسابات المعقدة. تسهل واجهة سطر الأوامر Mongo Shell الاختبار والتجريب.

الأسئلة الشائعة

  • هل يمكنني مقارنة الحقول عبر وثائق مختلفة؟ استخدم التجميع مع $lookup أو $group.
  • ماذا لو احتجت إلى مقارنة حقول من أنواع بيانات مختلفة؟ تأكد من توافق نوع البيانات ؛ قد يكون من الضروري إجراء تحويل صريح للنوع.
  • هل هناك آثار على الأداء لاستخدام $expr؟ نعم، ولكنه غالبًا ما يوفر المرونة اللازمة. قم بتحسين الاستعلامات لمجموعات البيانات الكبيرة.

اترك تعليقاً

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