NoSQL Databases • المستوى الثاني • الدرس 1
العودة لفهرس المستوىالمعاملات المنطقية والبحث المتقدم ($and, $or, $in, $not)
أهداف الدرس
- دمج شروط متعددة بـ
$andو$or. - الفحص بالقوائم عبر
$inو$nin. - عكس الشروط بـ
$notللاستثناء الدقيق. - التحقق من وجود الحقول بـ
$existsوالبحث بالأنماط عبر$regex.
1. $and و $or — قلب الاستعلامات المنطقية
$and — جميع الشروط
- يُرجع مستنداً إذا تحققت كل الشروط
- يعادل كتابة الشروط متجاورة
- مثال: فوق 25 و من مصر
$or — أحد الشروط
- يُرجع مستنداً إذا تحقق شرط واحد على الأقل
- لا يمكن تعويضه بكتابة متجاورة
- مثال: من السعودية أو الإمارات
javascript
// $and — فوق 25 ومن مصر
db.users.find({
$and: [
{ age: { $gt: 25 } },
{ country: "مصر" }
]
});
// نفس النتيجة (كتابة ضمنية):
db.users.find({
age: { $gt: 25 },
country: "مصر"
});
// $or — من السعودية أو الإمارات
db.users.find({
$or: [
{ country: "السعودية" },
{ country: "الإمارات" }
]
});2. $in و $nin — الفحص بالقوائم
عندما تريد البحث عن قائمة قيم في حقل واحد، استخدم $in. هذا أنظف من كتابة $or مع 5 شروط على نفس الحقل.
$in — ضمن القائمة
db.users.find({
age: { $in: [25, 28, 34] }
})$nin — خارج القائمة
db.users.find({
country: { $nin: ["مصر", "السعودية"] }
})javascript
// بدون $in — طويل ومكرر
db.users.find({
$or: [
{ age: 25 },
{ age: 28 },
{ age: 34 }
]
});
// مع $in — أنظف وأسرع
db.users.find({
age: { $in: [25, 28, 34] }
});3. $exists و $regex و $not
$exists
{ email:
{ $exists: true } }$regex
{ name:
{ $regex: "^ج" } }$not
{ country:
{ $not: { $eq: "مصر" } } }javascript
// $exists: true — الحقل موجود (حتى لو كان null)
db.users.find({ email: { $exists: true } });
// $exists: false — الحقل غير موجود
db.users.find({ phone: { $exists: false } });
// $regex — بداية النص
db.users.find({ name: { $regex: "^ج" } });
// $regex — نهاية النص
db.users.find({ email: { $regex: "@example.com$" } });
// $regex — يحتوي
db.users.find({ name: { $regex: "محمد" } });
// مع $options: i = case-insensitive
db.users.find({ name: { $regex: "^ج", $options: "i" } });
// $not — استثناء قيمة
db.users.find({ country: { $not: { $eq: "مصر" } } });
// $not مع $regex — استثناء نمط
db.users.find({ name: { $not: { $regex: "^ج" } } });4. دمج المعاملات
javascript
// السيناريو:
// "أريد مستخدمين من مصر أو السعودية، أعمارهم فوق 25،
// وأسماؤهم تبدأ بحرف (م)"
db.users.find({
$and: [
{
$or: [
{ country: "مصر" },
{ country: "السعودية" }
]
},
{ age: { $gt: 25 } },
{ name: { $regex: "^م" } }
]
});
// هذا هو "التفكير المركّب" في MongoDB —
// تدمج عدة معاملات لتصل إلى نتيجة دقيقة. التطبيق العملي المباشر
تحدي الدرس الأول: المعاملات المنطقية
قم بالتعديل على الكود بداخل المحرر أدناه لتطبيق المتطلبات التالية:
- استخدم
$orللبحث عن المستخدمين من السعودية أو الإمارات. - استخدم
$andللبحث عن المستخدمين فوق 25 سنة ومن مصر. - استخدم
$inللبحث عن أعمار محددة[25, 28, 34]. - استخدم
$notلاستثناء مستخدمي مصر. - استخدم
$existsو$regexللبحث المتقدم.
⏳ جارٍ تحميل المحرر التفاعلي...