MongoDB.Driver لـ C# (.NET): دليل شامل
1. ما هو MongoDB.Driver ولماذا تحتاجه
MongoDB.Driver هو المُشغّل (Driver) الرسمي عالي الأداء وغير المتزامن (Async) لتطبيقات .NET (C#, F#, VB.NET) للتفاعل مع قاعدة بيانات MongoDB. يوفر مجموعة كاملة من الأدوات لتنفيذ جميع عمليات CRUD (إنشاء، قراءة، تحديث، حذف)، وإدارة الفهارس (Indexes)، وتجميع البيانات (Aggregation)، والعمل مع المعاملات (Transactions)، ومعالجة التغييرات في الوقت الفعلي (Change Streams). يتم تطوير هذا المُشغّل وصيانته بواسطة شركة MongoDB Inc.، مما يضمن توافقه التام مع أحدث إصدارات MongoDB وتنفيذ جميع الإمكانيات الحديثة لنظام إدارة قواعد البيانات.
لماذا تحتاج هذه المكتبة؟ إذا كنت تطور تطبيق .NET (خدمة ويب باستخدام ASP.NET Core، تطبيق سطح مكتب باستخدام WPF، أداة سطر أوامر، أو خدمة مصغرة) وتريد استخدام MongoDB كمخزن بيانات رئيسي أو مساعد، فأنت بحاجة إلى مُشغّل لإنشاء الاتصال وتبادل البيانات. يقوم MongoDB.Driver بتجريد تعقيد بروتوكول الشبكة الخاص بـ MongoDB (Wire Protocol)، مما يوفر للمطور واجهة برمجة تطبيقات (API) ملائمة ومكتوبة بشكل صارم (Strictly Typed). أنت تتعامل مع كائنات C#، ويقوم المُشغّل تلقائياً بتحويلها (Serialize) إلى صيغة BSON (الصيغة الثنائية لـ MongoDB) والعكس. هذا يسمح لك بكتابة كود موجز وآمن وعالي الأداء دون الخوض في تفاصيل التفاعل منخفض المستوى.
تدعم المكتبة نموذجين رئيسيين للعمل: المتزامن (Synchronous) وغير المتزامن (Asynchronous) وهو الموصى به. الطرق غير المتزامنة (التي تنتهي باللاحقة Async) تمنع حظر سلاسل التنفيذ (Threads)، وهو أمر بالغ الأهمية لتطبيقات الخادم القابلة للتوسع. تتضمن المكتبة أيضاً موفر LINQ (LINQ Provider) الذي يترجم استعلامات LINQ إلى صيغة MongoDB Aggregation Pipeline، مما يجعل الكود أكثر تصريحاً (Declarative) ومألوفاً لمطوري .NET.
2. التثبيت
يتم التثبيت عبر مدير الحزم NuGet. قم بتنفيذ أحد الأوامر التالية في وحدة تحكم مدير الحزم (Package Manager Console) أو في terminal .NET CLI.
عبر .NET CLI (موصى به):
dotnet add package MongoDB.Driver
عبر Package Manager Console (Visual Studio):
Install-Package MongoDB.Driver
للمشاريع التي تستخدم Entity Framework Core (اختياري):
يوجد موفر منفصل باسم MongoDB.EntityFrameworkCore، لكن لمعظم المهام يكفي المُشغّل الأساسي.
بعد التثبيت، سيتم إضافة مرجع إلى ملف المشروع (.csproj):
<PackageReference Include="MongoDB.Driver" Version="2.25.0" />
3. بداية سريعة — مثال عملي بسيط
يقوم الكود التالي بالاتصال بنسخة محلية من MongoDB، والحصول على قاعدة بيانات "testdb"، ومجموعة "users"، وإدراج مستند واحد، ثم طباعة معرفه (ID) في وحدة التحكم.
using MongoDB.Bson;
using MongoDB.Driver;
// 1. إنشاء عميل (اتصال بالخادم)
var client = new MongoClient("mongodb://localhost:27017");
// 2. الحصول على قاعدة البيانات (يتم إنشاؤها تلقائياً إذا لم تكن موجودة)
var database = client.GetDatabase("testdb");
// 3. الحصول على المجموعة (يتم إنشاؤها تلقائياً عند أول إدراج)
var collection = database.GetCollection<BsonDocument>("users");
// 4. إنشاء مستند
var document = new BsonDocument
{
{ "name", "أحمد" },
{ "age", 30 },
{ "city", "القاهرة" }
};
// 5. إدراج المستند (بطريقة غير متزامنة)
await collection.InsertOneAsync(document);
// 6. طباعة المعرف المُنشأ
Console.WriteLine($"تم إدراج المستند بالمعرف: {document["_id"]}");
// 7. قراءة جميع المستندات من المجموعة
var allUsers = await collection.Find(new BsonDocument()).ToListAsync();
foreach (var user in allUsers)
{
Console.WriteLine(user.ToJson());
}
4. أهم الطرق/الدوال/الفئات
4.1 فئة MongoClient
هي نقطة البداية للاتصال بـ MongoDB. تستخدم لإنشاء اتصال بالخادم وإدارة قواعد البيانات.
MongoClient(string connectionString): إنشاء عميل جديد باستخدام سلسلة الاتصال.GetDatabase(string name): الحصول على قاعدة بيانات محددة.DropDatabase(string name): حذف قاعدة بيانات.
4.2 فئة IMongoCollection<T>
تمثل مجموعة من المستندات في قاعدة البيانات. هي الواجهة الأساسية لتنفيذ عمليات CRUD.
InsertOneAsync(T document): إدراج مستند واحد.InsertManyAsync(IEnumerable<T> documents): إدراج مجموعة من المستندات.Find(FilterDefinition<T> filter): البحث عن مستندات تطابق شرط معين.FindOneAndUpdateAsync(...): البحث عن مستند وتحديثه في نفس العملية.DeleteOneAsync(FilterDefinition<T> filter): حذف مستند واحد يطابق الشرط.DeleteManyAsync(FilterDefinition<T> filter): حذف جميع المستندات التي تطابق الشرط.ReplaceOneAsync(FilterDefinition<T> filter, T replacement): استبدال مستند موجود بمستند جديد.CountDocumentsAsync(FilterDefinition<T> filter): حساب عدد المستندات التي تطابق الشرط.
4.3 فئة Builders<T>
توفر طرقاً مساعدة لبناء عوامل التصفية (Filters) والتحديثات (Updates) والفهارس (Indexes) بطريقة سهلة القراءة.
Builders<T>.Filter: لبناء شروط البحث (مثل Eq, Gt, Lt, In, And, Or).Builders<T>.Update: لبناء عمليات التحديث (مثل Set, Unset, Inc, Push, Pull).Builders<T>.IndexKeys: لبناء مفاتيح الفهارس (مثل Ascending, Descending, Text).
4.4 مثال على استخدام Builders للتصفية والتحديث
var filter = Builders<BsonDocument>.Filter.Eq("name", "أحمد");
var update = Builders<BsonDocument>.Update.Set("age", 31);
await collection.UpdateOneAsync(filter, update);
5. نصائح للمبتدئين
- استخدم دائماً الطرق غير المتزامنة (
Async) في تطبيقات ASP.NET Core لتحسين الأداء. - قم بتعريف فئات (Classes) نموذجية (POCOs) لتمثيل مستنداتك بدلاً من استخدام
BsonDocumentللحصول على كود أكثر أماناً من حيث الأنواع (Type Safety). - استخدم
ObjectIdكمعرف افتراضي للمستندات لضمان التفرد. - تعلم أساسيات MongoDB Aggregation Pipeline لتنفيذ استعلامات معقدة.
- قم بفهرسة الحقول التي تستخدمها بكثرة في عمليات البحث لتحسين سرعة الاستعلامات.
6. الخلاصة
MongoDB.Driver هو أداة قوية وموثوقة لأي مطور .NET يرغب في استخدام MongoDB. بفضل دعمه الكامل لـ CRUD، والتجميع، والمعاملات، والتحديثات في الوقت الفعلي، يمكنك بناء تطبيقات حديثة وقابلة للتوسع بسهولة. ابدأ بتجربة الأمثلة البسيطة أعلاه، ثم انتقل إلى بناء تطبيقات أكثر تعقيداً.