
MongoDB Operators وAggregation وIndexing وSearch وValidation
يصبح MongoDB قويًا عندما تتجاوز عمليات الإدراج والبحث والتحديث والحذف الأساسية. تحتاج التطبيقات الحقيقية عادةً إلى تصفية متقدمة وتحديثات آمنة وتقارير وربط بين قواعد collections وأداء search وindexes وvalidation التي تحمي البيانات المخزنة.
تشرح هذه المقالة موضوعات MongoDB الموضحة في مسار التعلم: query operators، update operators، aggregation، مراحل aggregation الشائعة مثلمجموعة $,حد $,مشروع $,$نوع,$تطابق,$addFields,عدد $,بحث $، و$ خارج، ثم indexing/search وvalidation.
الهدف ليس فقط حفظ بناء الجملة. الهدف هو فهم كيفية استخدام هذه الميزات في أنظمة backend الحقيقية مثل لوحات المعلومات ولوحات الإدارة وأدوات إعداد التقارير وAPIs والكتالوجات والسجلات والتحليلات وأنظمة إدارة المستخدم.
مشغلي الاستعلام MongoDB
يتم استخدام الاستعلام operators لتصفية documents بناءً على الشروط. بدلاً من البحث عن طريق المساواة التامة فقط، يتيح لك query operators البحث عن search من خلال المقارنة والوجود ومحتويات المصفوفة ومطابقة الأنماط والقواعد المنطقية وقيم document المتداخلة.
استعلام بسيط يتحقق من المساواة المباشرة:
db.users.find({ role: "admin" })يؤدي هذا إلى إرجاع المستخدمين الذيندورالحقل يساوي بالضبطadmin. الاستعلام operators يجعل هذا الأمر أكثر مرونة.
مشغلي المقارنة
المقارنة يتم استخدام operators عندما يجب أن تكون القيمة أكبر من أو أقل من أو تساوي إحدى القيم المتعددة أو لا تساوي قيمة محددة.
مكافئ $:يساوي قيمة.
$ني:لا يساوي قيمة.
$gt:أكبر من قيمة.
$GTE:أكبر من أو يساوي قيمة.
$lt:أقل من قيمة.
$LTE:أقل من أو يساوي قيمة.
$في:القيمة موجودة داخل قائمة القيم المسموح بها.
تسعة دولارات:القيمة غير موجودة داخل القائمة.
db.products.find({
price: { $gte: 100, $lte: 500 }
})يقوم هذا الاستعلام بإرجاع المنتجات التي يتراوح سعرها بين 100 و500. وهذا أمر شائع في عوامل تصفية المنتجات وأنظمة الحجز ولوحات المعلومات وصفحات search.
db.users.find({
role: { $in: ["admin", "editor"] }
})يقوم هذا الاستعلام بإرجاع المستخدمين الذين يكون دورهم إما مسؤولاً أو محررًا. ال$ فييكون operator مفيدًا عندما يقبل المرشح قيمًا متعددة.
العوامل المنطقية
يجمع operators المنطقي بين شروط متعددة. وهي مهمة عندما يعتمد الاستعلام على أكثر من قاعدة واحدة.
$ و:يجب أن تكون جميع الشروط صحيحة.
$أو:يجب أن يكون شرط واحد على الأقل صحيحا.
$لا:يعكس الشرط.
$ ولا:لا ينبغي أن يكون أي من الشروط صحيحا.
db.orders.find({
$or: [
{ status: "pending" },
{ status: "processing" }
]
})يقوم هذا الاستعلام بإرجاع الطلبات المعلقة أو قيد المعالجة.
db.products.find({
$and: [
{ price: { $gte: 100 } },
{ stock: { $gt: 0 } },
{ active: true }
]
})يقوم هذا الاستعلام بإرجاع المنتجات النشطة الموجودة في المخزون والتي يكون سعرها أكبر من أو يساوي 100.
مشغلي العناصر
يتحقق العنصر operators من وجود الحقل أو ما إذا كان يحتوي على نوع BSON محدد.
$ موجود:يتحقق من وجود حقل في document.
نوع $:يتحقق من نوع بيانات الحقل.
db.users.find({
phone: { $exists: true }
})يقوم هذا الاستعلام بإرجاع المستخدمين الذين لديهم حقل هاتف. يكون ذلك مفيدًا عندما تكون documents مرنةة ولا تحتوي كل document على نفس الحقول.
مشغلي المصفوفة
يُستخدم MongoDB غالبًا مع المصفوفات الموجودة داخل documents. يساعد Array operators في الاستعلام عن القيم المخزنة داخل المصفوفات.
$الكل:يجب أن يحتوي المصفوفة على كافة القيم المحددة.
حجم $:يجب أن تحتوي المصفوفة على عدد محدد من العناصر.
$elemMatch:يجب أن يتطابق عنصر صفيف واحد على الأقل مع شروط متعددة.
db.posts.find({
tags: { $all: ["mongodb", "backend"] }
})يؤدي هذا إلى إرجاع المنشورات التي تحتوي على كلتا العلامتين: mongodb وbackend.
db.products.find({
variants: {
$elemMatch: {
color: "black",
stock: { $gt: 0 }
}
}
})يؤدي ذلك إلى إرجاع المنتجات التي تحتوي على متغير واحد على الأقل حيث يكون اللون أسود والمخزون أكبر من الصفر.
استعلامات التعبير العادي
ال$ regexيتم استخدام operator لمطابقة الأنماط. يمكن أن يكون مفيدًا لمرشحات النصوص البسيطة، ولكن يجب استخدامه بحذر مع collections الكبيرة لأن التعبيرات العادية غير الفعالة يمكن أن تكون بطيئة.
db.users.find({
name: { $regex: "^ad", $options: "i" }
})يعرض هذا الاستعلام المستخدمين الذين تبدأ أسماؤهم بـ "إعلان"، متجاهلاً حالة الأحرف. بالنسبة للنص الكامل المتقدم search، عادةً ما تكون ميزة search index أو search المخصصة أفضل من الاعتماد على التعبيرات العادية وحدها.
مشغلي التحديث MongoDB
قم بتحديث operators وتعديل documents الموجود دون استبدال document بالكامل. يعد هذا أكثر أمانًا وفعالية من قراءة document وتغييره في رمز التطبيق وإعادة كتابته بالكامل.
تبدو بنية التحديث الأكثر شيوعًا كما يلي:
db.users.updateOne(
{ _id: ObjectId("64f000000000000000000001") },
{ $set: { name: "Adnan" } }
)الكائن الأول هو المرشح. يحتوي الكائن الثاني على عملية التحديث.
مجموعة $
المجموعة $يقوم operator بإضافة حقل أو تغيير قيمة حقل موجود.
db.users.updateOne(
{ email: "adnan@example.com" },
{ $set: { name: "Adnan Mehrat", active: true } }
)يؤدي هذا إلى تحديث الاسم والحالة النشطة لمستخدم واحد.
$ غير محدد
ال$ غير محدديقوم operator بإزالة حقل من document.
db.users.updateOne(
{ email: "adnan@example.com" },
{ $unset: { temporaryToken: "" } }
)هذا يزيلTemporaryTokenالحقل من المستخدم المطابق document.
$inc
ال$incيعمل operator على زيادة القيمة الرقمية أو تقليلها.
db.products.updateOne(
{ sku: "PRD-100" },
{ $inc: { stock: -1 } }
)وهذا يقلل من مخزون المنتج بمقدار واحد. وهو شائع في أنظمة المخزون والعدادات والإحصائيات وتتبع الاستخدام.
$دفع
ال$دفعيضيف operator قيمة إلى صفيف.
db.posts.updateOne(
{ slug: "mongodb-guide" },
{ $push: { tags: "database" } }
)يؤدي هذا إلى إضافة علامة جديدة إلى مجموعة العلامات.
$addToSet
ال$addToSetيضيف operator قيمة إلى المصفوفة فقط إذا لم تكن موجودة بالفعل.
db.posts.updateOne(
{ slug: "mongodb-guide" },
{ $addToSet: { tags: "mongodb" } }
)يساعد هذا في منع القيم المكررة داخل المصفوفات.
$سحب
ال$سحبيقوم operator بإزالة القيم المطابقة من المصفوفة.
db.posts.updateOne(
{ slug: "mongodb-guide" },
{ $pull: { tags: "old-tag" } }
)يؤدي هذا إلى إزالة القيمةالعلامة القديمةمن مجموعة العلامات.
إعادة تسمية $
الإعادة تسمية $يقوم operator بإعادة تسمية الحقل.
db.users.updateMany(
{},
{ $rename: { "fullname": "fullName" } }
)يعد هذا مفيدًا أثناء تنظيف البيانات أو عند تغيير اصطلاح تسمية الحقل.
$currentDate
ال$currentDateيقوم operator بتعيين حقل للتاريخ الحالي.
db.users.updateOne(
{ email: "adnan@example.com" },
{ $currentDate: { updatedAt: true } }
)يستخدم هذا بشكل شائع للطوابع الزمنية مثلمحدث.
مجموعات MongoDB
يعد التجميع أحد أهم ميزات MongoDB لإعداد التقارير والتحليلات ولوحات المعلومات وتحويل البيانات وAPI responses المتقدم. بدلاً من إرجاع documents تمامًا كما تم تخزينها، يتيح لك aggregation معالجة documents من خلال pipeline.
aggregation pipeline عبارة عن سلسلة من المراحل. تستقبل كل مرحلة documents وتعالجها وتمرر النتيجة إلى المرحلة التالية.
db.orders.aggregate([
{ $match: { status: "paid" } },
{ $group: { _id: "$customerId", total: { $sum: "$amount" } } },
{ $sort: { total: -1 } }
])يقوم pipeline بتصفية الطلبات المدفوعة، وتجميعها حسب العميل، وحساب إجمالي الإنفاق، وفرز العملاء حسب المبلغ الإجمالي.
MongoDB $تطابق
ال$تطابقمرشحات المرحلة documents داخل aggregation pipeline. إنه يعمل بشكل مشابه لكائن التصفية المستخدم فيتجد ().
db.orders.aggregate([
{ $match: { status: "paid" } }
])يؤدي هذا إلى الاحتفاظ فقط بالطلبات المدفوعة في pipeline.
في معظم pipelines،$تطابقينبغي وضعها في أقرب وقت ممكن. تعمل التصفية المبكرة على تقليل عدد documents التي يجب على المراحل اللاحقة معالجتها.
مجموعة MongoDB $
المجموعة $مجموعات المراحل documents حسب الحقل أو التعبير المحدد. يتم استخدامه للإجماليات والمتوسطات والأعداد والحد الأدنى والحد الأقصى والتقارير المجمعة.
db.orders.aggregate([
{
$group: {
_id: "$status",
totalOrders: { $sum: 1 },
totalRevenue: { $sum: "$amount" },
averageOrder: { $avg: "$amount" }
}
}
])يقوم هذا بتجميع الطلبات حسب الحالة وحساب عدد الطلبات وإجمالي الإيرادات ومتوسط مبلغ الطلب لكل حالة.
ال_idالميدان داخلمجموعة $يحدد مفتاح التجميع. إذا قمت بالتجميع حسبحالة $، تصبح كل حالة مجموعة واحدة.
MongoDB الحد الأقصى بالدولار
الحد $تقيد المرحلة عدد documents الذي تم تمريره إلى المرحلة التالية.
db.products.aggregate([
{ $sort: { price: -1 } },
{ $limit: 10 }
])يؤدي هذا إلى إرجاع أغلى 10 منتجات بعد الفرز حسب السعر تنازليًا.
عند الاستخدامحد $مع الفرز، تذكر أن الترتيب مهم. إذا قمت بالتحديد قبل الفرز، فإنك تقوم بفرز مجموعة فرعية صغيرة فقط. إذا قمت بالفرز قبل التحديد، فستحصل على أفضل النتائج الحقيقية.
مشروع MongoDB $
المشروع $تتحكم المرحلة في الحقول التي تظهر في الإخراج. ويمكنه تضمين الحقول واستبعاد الحقول وإعادة تسمية القيم وإنشاء الحقول المحسوبة.
db.users.aggregate([
{
$project: {
_id: 0,
name: 1,
email: 1,
role: 1
}
}
])يؤدي هذا إلى إرجاع الاسم والبريد الإلكتروني والدور فقط أثناء الاختباء_id.
db.orders.aggregate([
{
$project: {
customerId: 1,
amount: 1,
tax: { $multiply: ["$amount", 0.18] },
totalWithTax: { $multiply: ["$amount", 1.18] }
}
}
])يؤدي هذا إلى إنشاء حقول محسوبة للضريبة والمبلغ الإجمالي مع الضريبة.
MongoDB $فرز
ال$نوعأوامر المرحلة documents. استخدم1للترتيب التصاعدي و-1للترتيب التنازلي.
db.orders.aggregate([
{ $sort: { createdAt: -1 } }
])يؤدي هذا إلى إرجاع أحدث الطلبات أولاً.
يمكن أن يصبح الفرز باهظ الثمن على collections الكبيرة. تعتبر الفهارس مهمة عند الفرز حسب الحقول المستخدمة بشكل متكرر في APIs ولوحات معلومات المسؤول.
MongoDB $addFields
ال$addFieldsتضيف المرحلة حقولًا جديدة إلى documents مع الاحتفاظ بالحقول الموجودة.
db.orders.aggregate([
{
$addFields: {
totalWithTax: { $multiply: ["$amount", 1.18] }
}
}
])وهذا يضيف محسوبةTotalWithTaxالحقل دون إزالة الحقول الأخرى.
الفرق بينمشروع $و$addFieldsهل هذامشروع $يستخدم عادة لتشكيل الإخراج، في حين$addFieldsيقوم بإضافة الحقول أو الكتابة فوقها مع الاحتفاظ ببنية document.
MongoDB عدد الدولارات
العدد $تحسب المرحلة عدد documents الذي يصل إلى تلك المرحلة من pipeline.
db.orders.aggregate([
{ $match: { status: "paid" } },
{ $count: "paidOrders" }
])يؤدي هذا إلى إرجاع عدد الطلبات المدفوعة.
والنتيجة هي document بحقل مسمىpayorders. يعد هذا مفيدًا للإحصائيات وعدادات API والتقارير وبطاقات لوحة المعلومات.
بحث MongoDB $
البحث $تقوم المرحلة بتنفيذ عملية تشبه الانضمام بين collections. MongoDB هو document database، لكن الأنظمة الحقيقية تحتاج أحيانًا إلى بيانات ذات صلة من collection آخر.
db.orders.aggregate([
{
$lookup: {
from: "users",
localField: "userId",
foreignField: "_id",
as: "user"
}
}
])يأخذ هذا الأوامر ويرفق المستخدمين المطابقين في ملفuserصفيف.
بحث $مفيد، ولكن لا ينبغي استخدامه كذريعة لتصميم MongoDB تمامًا مثل database العلائقي. في العديد من تصميمات MongoDB، يتم تضمين بعض البيانات داخل document لتقليل الحاجة إلى الصلات المتكررة.
استخدام $unwind بعد البحث $
لانبحث $إرجاع مصفوفة،$استرخاءغالبًا ما يتم استخدامه عندما يجب أن يحتوي كل أمر على كائن مستخدم واحد بدلاً من مصفوفة مستخدم.
db.orders.aggregate([
{
$lookup: {
from: "users",
localField: "userId",
foreignField: "_id",
as: "user"
}
},
{ $unwind: "$user" }
])يؤدي هذا إلى تحويل صفيف المستخدم إلى كائن مرتبط عادي لكل طلب document.
MongoDB $ خارج
ال$ خارجتقوم المرحلة بكتابة نتيجة aggregation pipeline إلى collection. يتم استخدامه بشكل شائع للتقارير الفعلية ومجموعات البيانات المحولة والتحليلات المحسوبة مسبقًا.
db.orders.aggregate([
{ $match: { status: "paid" } },
{
$group: {
_id: "$userId",
totalSpent: { $sum: "$amount" },
ordersCount: { $sum: 1 }
}
},
{ $out: "customer_order_summary" }
])يؤدي هذا إلى إنشاء أو استبدال collection المسمىcustomer_order_summaryمع نتيجة aggregation.
استخدم$ خارجبعناية. يقوم بكتابة البيانات إلى collection، لذلك لا ينبغي معاملتها كاستعلام عادي للقراءة فقط. ومن المهم في أنظمة الإنتاج التحكم في مكان وزمان تنفيذ هذه المرحلة.
مثال التجميع العملي
يقوم المثال التالي بإنشاء تقرير مبيعات صغير. يقوم بتصفية الطلبات المدفوعة، والمجموعات حسب المستخدم، وحساب الإجماليات، وضم معلومات المستخدم، والفرز حسب إجمالي الإنفاق، وقصر النتيجة على أفضل 5 عملاء.
db.orders.aggregate([
{ $match: { status: "paid" } },
{
$group: {
_id: "$userId",
totalSpent: { $sum: "$amount" },
orderCount: { $sum: 1 },
averageOrder: { $avg: "$amount" }
}
},
{
$lookup: {
from: "users",
localField: "_id",
foreignField: "_id",
as: "user"
}
},
{ $unwind: "$user" },
{
$project: {
_id: 0,
userId: "$_id",
name: "$user.name",
email: "$user.email",
totalSpent: 1,
orderCount: 1,
averageOrder: 1
}
},
{ $sort: { totalSpent: -1 } },
{ $limit: 5 }
])يعد هذا النوع من pipeline شائعًا في لوحات معلومات المسؤول وإعداد تقارير APIs. فهو يحول الطلب الأولي documents إلى معلومات تجارية مفيدة.
فهرسة MongoDB وSearch
تعمل الفهارس على تحسين أداء الاستعلام من خلال السماح لـ MongoDB بالعثور على documents دون مسح collection بالكامل. بدون indexes، قد يحتاج MongoDB إلى فحص العديد من documents للإجابة على استعلام، خاصة مع نمو collection.
يمكن إنشاء index الأساسي على النحو التالي:
db.users.createIndex({ email: 1 })يؤدي هذا إلى إنشاء index تصاعدي في حقل البريد الإلكتروني.
لماذا يهم الفهارس
تعد الفهارس مهمة للحقول المستخدمة غالبًا في عوامل التصفية والفرز والصلات. تتضمن الأمثلة البريد الإلكتروني، واسم المستخدم، والارتباط الثابت، والحالة، وcreateAt، وuserId، وproductId، وcategoryId، وحالة الطلب.
db.orders.createIndex({ userId: 1, createdAt: -1 })يمكن أن يساعد هذا المركب index في الاستعلامات التي تقوم بتصفية الطلبات حسب المستخدم وفرزها حسب تاريخ الإنشاء.
الفهارس الفريدة
يمنع index الفريد القيم المكررة.
db.users.createIndex({ email: 1 }, { unique: true })وهذا يضمن أنه لا يمكن أن يكون لدى مستخدمين نفس عنوان البريد الإلكتروني.
أرسل رسالة نصية إلى Search
يمكن لـ MongoDB استخدام النص indexes للنص الأساسي search.
db.posts.createIndex({ title: "text", content: "text" })db.posts.find({
$text: { $search: "mongodb aggregation" }
})يؤدي هذا إلى البحث في الحقول النصية المفهرسة للكلمات المحددة. بالنسبة لسلوك search الأكثر تقدمًا مثل التصنيف، والإكمال التلقائي، والتسامح مع الأخطاء المطبعية، والتصفية حسب الصلة، وتحليل اللغة المتقدم، قد يكون حل search المخصص أكثر ملاءمة.
أفضل ممارسات الفهرسة
يجب إنشاء الفهارس بناءً على أنماط استعلام حقيقية، وليس بشكل عشوائي. عدد قليل جدًا من indexes يمكن أن يجعل القراءة بطيئة. يمكن لعدد كبير جدًا من indexes أن يجعل عملية الكتابة أبطأ ويزيد من استخدام مساحة التخزين.
قم بإنشاء indexes للحقول المستخدمة بشكل متكرر في عوامل التصفية.
قم بإنشاء indexes لحقول الفرز الشائعة.
استخدم المركب indexes عند تصفية الاستعلامات حسب حقول متعددة معًا.
استخدم indexes الفريد للحقول التي يجب أن تكون فريدة.
قم بمراجعة أداء الاستعلام مع شرح الخطط عند الحاجة إلى التحسين.
تجنب إنشاء indexes التي لا تستخدمها الاستعلامات الحقيقية مطلقًا.
التحقق من صحة MongoDB
يعتبر MongoDB مرنًا بشكل افتراضي، لكن التطبيقات الاحترافية لا تزال بحاجة إلى قواعد البيانات. يساعد التحقق من الصحة على التأكد من أن documents يتبع البنية المتوقعة قبل إدراجها أو تحديثها.
يمكن أن يؤدي التحقق من الصحة إلى حماية collection من فقدان الحقول المطلوبة وأنواع البيانات الخاطئة والقيم غير الصالحة وبنية document غير المتسقة.
التحقق من صحة المجموعة باستخدام $jsonSchema
يتم استخدام طريقة شائعة للتحقق من صحة documents$jsonSchema.
db.createCollection("users", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["name", "email", "role"],
properties: {
name: {
bsonType: "string",
description: "Name must be a string and is required."
},
email: {
bsonType: "string",
description: "Email must be a string and is required."
},
role: {
enum: ["admin", "editor", "user"],
description: "Role must be admin, editor, or user."
},
age: {
bsonType: "int",
minimum: 0,
description: "Age must be a positive integer."
}
}
}
}
})تتطلب قاعدة validation الاسم والبريد الإلكتروني والدور. كما أنه يقيد قيم الأدوار بالمسؤول أو المحرر أو المستخدم.
إضافة التحقق من الصحة إلى مجموعة موجودة
يمكنك تعديل collection الموجود باستخدامcom.colMod.
db.runCommand({
collMod: "users",
validator: {
$jsonSchema: {
bsonType: "object",
required: ["name", "email"],
properties: {
name: { bsonType: "string" },
email: { bsonType: "string" },
active: { bsonType: "bool" }
}
}
}
})وهذا يطبق قواعد validation على مستخدمي collection.
مستوى التحقق وإجراءات التحقق
يمكن التحكم في سلوك التحقق من الصحة باستخدام مستوى validation وإجراء validation.
مستوى التحقق:يتحكم في مدى دقة تطبيق validation.
إجراء التحقق من الصحة:يتحكم في ما إذا كان سيتم رفض documents غير الصالح أو التحذير منه فقط.
db.runCommand({
collMod: "users",
validator: {
$jsonSchema: {
bsonType: "object",
required: ["email"],
properties: {
email: { bsonType: "string" }
}
}
},
validationLevel: "moderate",
validationAction: "error"
})في تطبيقات الإنتاج، يجب تصميم validation بعناية. لا يزال validation على مستوى التطبيق مهمًا، لكن database على مستوى validation يضيف طبقة إضافية من الحماية.
كيف تعمل ميزات MongoDB معًا
في تطوير backend الحقيقي، يتم استخدام query operators وupdate operators وaggregation وindexes وvalidation معًا.
على سبيل المثال، قد يستخدم نظام التجارة الإلكترونية query operators لتصفية المنتجات حسب class والسعر، وupdate operators لتقليل المخزون بعد الشراء، وaggregation pipelines لإنشاء تقارير المبيعات، وindexes لتسريع المنتج search وسجل الطلبات، وقواعد validation لحماية المستخدم والطلب documents.
قد يستخدم نظام المدونات query operators للعثور على المنشورات المنشورة، وupdate operators لزيادة views، وaggregation لحساب المشاركات حسب class، وindexes على الارتباط التقريبي والمنشورات المنشورة، وvalidation للمطالبة بالعنوان والارتباط التقريبي والحالة ومعرف المؤلف.
قد تستخدم لوحة معلومات SaaS aggregation pipelines لحساب النشاط الشهري،بحث $للانضمام إلى معلومات العملاء،مجموعة $لحساب الإجماليات، وindexes للحفاظ على سرعة التقارير، وvalidation للحفاظ على اتساق بيانات المستأجر.
الأخطاء الشائعة التي يجب تجنبها
باستخدامبحث $في كل مكان بدلاً من تصميم documents بشكل صحيح.
تشغيل aggregation pipelines كبير بدون استخدام التصفية مبكرًا$تطابق.
فرز collections الكبير بدون indexes المفيد.
استخدام التعبيرات العادية لكل مشكلة search.
إنشاء عدد كبير جدًا من indexes دون التحقق من استخدام الاستعلام الحقيقي.
تحديث documents عن طريق استبدال document بالكامل عندما يكون update operators أكثر أمانًا.
الثقة في التطبيق validation فقط وتجاهل database على مستوى validation.
باستخدام$ خارجدون أن يفهم أنه يكتب النتائج إلى collection.
ترتيب التعلم الموصى به
لتعلم هذه المواضيع بوضوح، استخدم هذا الترتيب:
تعرف على query operators لتصفية documents.
تعرف على update operators لتعديل documents بأمان.
دراسة أساسيات aggregation pipeline.
ممارسة$تطابق,مجموعة $,مشروع $,$نوع، وحد $.
تعلمبحث $فقط بعد فهم تصميم document.
استخدم$ خارجبعناية لمخرجات collections التي تم إنشاؤها وإعداد التقارير.
قم بدراسة indexes بناءً على الاستعلامات التي يقوم تطبيقك بتشغيلها بالفعل.
أضف قواعد validation لحماية collections المهمة.
الاستنتاج
تعد مراحل MongoDB query operators وupdate operators وaggregation وindexing وsearch وvalidation ضرورية لإنشاء تطبيقات احترافية تعتمد على database. عمليات CRUD الأساسية ليست سوى البداية. تحتاج التطبيقات الحقيقية إلى مرشحات معبرة، وتحديثات يمكن التحكم فيها، واستعلامات سريعة، وتقارير مفيدة، وهياكل بيانات محمية.
يساعدك الاستعلام operators في العثور على documents المناسب. يساعدك تحديث operators على تغيير documents بأمان. يعمل تجميع pipelines على تحويل البيانات الأولية إلى تقارير ومخرجات جاهزة لـ API. تحافظ الفهارس على الاستعلامات بسرعة مع نمو البيانات. التحقق من الصحة يحمي collections من documents غير المتسق أو غير الصالح.
عند استخدام هذه الميزات معًا بشكل صحيح، يصبح MongoDB أكثر من مجرد document database المرن. تصبح طبقة بيانات backend قوية لـ APIs ولوحات المعلومات والتحليلات وأنظمة المحتوى ومنصات التجارة الإلكترونية وتطبيقات SaaS ومشاريع الويب الحديثة.
