03-05-2025, 03:17 PM
للتعامل مع قاعدة بيانات MongoDB باستخدام مكونات FireDAC في Delphi، يمكنك تنفيذ عمليات CRUD (إنشاء، قراءة، تحديث، حذف) على البيانات المخزنة بتنسيق JSON داخل مستندات MongoDB.
المتطلبات الأساسية
إعداد الاتصال بـ MongoDB
في Delphi، يمكنك استخدام مكونات FireDAC للاتصال بـ MongoDB. إليك كيفية إعداد الاتصال:
تأكد من استبدال
بعنوان الخادم و
باسم قاعدة البيانات المناسبة.
تنفيذ عمليات CRUD1. إضافة مستند جديد (Create):
2. قراءة المستندات (Read):
3. تحديث مستند (Update):
4. حذف مستند (Delete):
التعامل مع الجداول المترابطة
في MongoDB، تُخزن البيانات المترابطة عادةً داخل مستندات فرعية أو مصفوفات. على سبيل المثال، لتخزين معلومات العنوان داخل مستند المستخدم:
للاستعلام عن بيانات مترابطة، يمكنك استخدام الاستعلامات المدمجة:
لعرض بيانات MongoDB في مكون DBGrid في Delphi باستخدام FireDAC، تحتاج إلى تحويل نتائج الاستعلام من MongoDB إلى مصدر بيانات يفهمه DBGrid مثل TFDMemTable. لأن MongoDB لا يُرجع نتائج على شكل جدول مباشرةً، يجب أن تقوم بهذه العملية يدويًا أو باستخدام TFDAdaptedDataSet.
1. إضافة المكونات إلى النموذج
ضع هذه المكونات على النموذج (Form):
TFDConnection (الاتصال بقاعدة MongoDB)
TFDPhysMongoDriverLink (لربط FireDAC بمونغو)
TFDMemTable (لتخزين البيانات مؤقتًا)
TDataSource (لربط TFDMemTable بـ DBGrid)
TDBGrid (لعرض البيانات)
2. ربط المكونات
DataSource1.Dataset := FDQuery1 أو FDMemTable1
DBGrid1.DataSource := DataSource1
3. جلب البيانات من MongoDB إلى TFDMemTable
4. استدعاء الإجراء في FormCreate أو زر
ملاحظات:
يمكنك تعديل الحقول بحسب البنية الحقيقية للـ Document في MongoDB.
إذا كان لديك حقول داخلية (مثل address.city)، فستحتاج إلى الوصول إليها باستخدام AsDocument.GetValue(...).
لتحديث البيانات في DBGrid بعد إضافة أو حذف، استدعِ LoadMongoDataToGrid مرة أخرى.
المتطلبات الأساسية
- تأكد من أن خادم MongoDB يعمل ويمكن الوصول إليه من جهازك.
- استخدم Delphi 10.4 أو إصدارًا أحدث، حيث تدعم هذه الإصدارات الاتصال بـ MongoDB عبر FireDAC.
- تأكد من أن مكتبات MongoDB (libmongoc وlibbson) مثبتة ومهيأة بشكل صحيح
إعداد الاتصال بـ MongoDB
في Delphi، يمكنك استخدام مكونات FireDAC للاتصال بـ MongoDB. إليك كيفية إعداد الاتصال:
- إضافة المكونات:
- أضف مكون
إلى النموذج.كود :TFDConnection
- أضف مكون
كود :TFDPhysMongoDriverLink
- أضف مكون
- تكوين الاتصال:
كود :
FDConnection1.Params.Clear;
FDConnection1.Params.Add('DriverID=Mongo');
FDConnection1.Params.Add('Server=localhost');
FDConnection1.Params.Add('Port=27017');
FDConnection1.Params.Add('Database=test');
FDConnection1.Connected := True;تأكد من استبدال
كود :
localhostكود :
testتنفيذ عمليات CRUD1. إضافة مستند جديد (Create):
كود :
var
MongoDoc: TgoBsonDocument;
begin
MongoDoc := TgoBsonDocument.Create;
try
MongoDoc.Add('name', 'John Doe');
MongoDoc.Add('age', 30);
FDConnection1.CliObj['test']['users'].InsertOne(MongoDoc);
finally
MongoDoc.Free;
end;
end;2. قراءة المستندات (Read):
كود :
var
Cursor: IMongoCursor;
Doc: TgoBsonDocument;
begin
Cursor := FDConnection1.CliObj['test']['users'].Find;
while Cursor.Next do
begin
Doc := Cursor.Current;
ShowMessage(Doc.AsJSON);
end;
end;3. تحديث مستند (Update):
كود :
var
Filter, UpdateDoc: TgoBsonDocument;
begin
Filter := TgoBsonDocument.Create.Add('_id', 'some_id');
UpdateDoc := TgoBsonDocument.Create.Add('$set', TgoBsonDocument.Create.Add('age', 31));
FDConnection1.CliObj['test']['users'].UpdateOne(Filter, UpdateDoc);
end;4. حذف مستند (Delete):
كود :
var
Filter: TgoBsonDocument;
begin
Filter := TgoBsonDocument.Create.Add('_id', 'some_id');
FDConnection1.CliObj['test']['users'].DeleteOne(Filter);
end;التعامل مع الجداول المترابطة
في MongoDB، تُخزن البيانات المترابطة عادةً داخل مستندات فرعية أو مصفوفات. على سبيل المثال، لتخزين معلومات العنوان داخل مستند المستخدم:
كود :
var
UserDoc, AddressDoc: TgoBsonDocument;
begin
AddressDoc := TgoBsonDocument.Create;
AddressDoc.Add('street', '123 Main St');
AddressDoc.Add('city', 'Anytown');
AddressDoc.Add('zip', '12345');
UserDoc := TgoBsonDocument.Create;
UserDoc.Add('name', 'Jane Doe');
UserDoc.Add('address', AddressDoc);
FDConnection1.CliObj['test']['users'].InsertOne(UserDoc);
end;للاستعلام عن بيانات مترابطة، يمكنك استخدام الاستعلامات المدمجة:
كود :
var
Cursor: IMongoCursor;
Doc: TgoBsonDocument;
begin
Cursor := FDConnection1.CliObj['test']['users'].Find;
while Cursor.Next do
begin
Doc := Cursor.Current;
ShowMessage(Doc.GetValue('name').AsString + ' - ' +
Doc.GetValue('address').AsDocument.GetValue('city').AsString);
end;
end;لعرض بيانات MongoDB في مكون DBGrid في Delphi باستخدام FireDAC، تحتاج إلى تحويل نتائج الاستعلام من MongoDB إلى مصدر بيانات يفهمه DBGrid مثل TFDMemTable. لأن MongoDB لا يُرجع نتائج على شكل جدول مباشرةً، يجب أن تقوم بهذه العملية يدويًا أو باستخدام TFDAdaptedDataSet.
1. إضافة المكونات إلى النموذج
ضع هذه المكونات على النموذج (Form):
TFDConnection (الاتصال بقاعدة MongoDB)
TFDPhysMongoDriverLink (لربط FireDAC بمونغو)
TFDMemTable (لتخزين البيانات مؤقتًا)
TDataSource (لربط TFDMemTable بـ DBGrid)
TDBGrid (لعرض البيانات)
2. ربط المكونات
DataSource1.Dataset := FDQuery1 أو FDMemTable1
DBGrid1.DataSource := DataSource1
3. جلب البيانات من MongoDB إلى TFDMemTable
كود :
uses
FireDAC.Comp.Client, System.JSON, FireDAC.Stan.Param, FireDAC.Stan.StorageBin,
FireDAC.Comp.DataSet, FireDAC.Stan.StorageJSON, Data.DB, FireDAC.Stan.Intf;
procedure TForm1.LoadMongoDataToGrid;
var
Cursor: IMongoCursor;
Doc: TgoBsonDocument;
begin
FDMemTable1.DisableControls;
FDMemTable1.Close;
FDMemTable1.Fields.Clear;
FDMemTable1.FieldDefs.Clear;
Cursor := FDConnection1.CliObj['test']['users'].Find;
// تعريف الحقول يدويًا بناءً على البيانات
FDMemTable1.FieldDefs.Add('name', ftString, 100);
FDMemTable1.FieldDefs.Add('age', ftInteger);
FDMemTable1.CreateDataSet;
while Cursor.Next do
begin
Doc := Cursor.Current;
FDMemTable1.Append;
FDMemTable1.FieldByName('name').AsString := Doc.Values['name'].AsString;
FDMemTable1.FieldByName('age').AsInteger := Doc.Values['age'].AsInteger;
FDMemTable1.Post;
end;
FDMemTable1.EnableControls;
end;4. استدعاء الإجراء في FormCreate أو زر
كود :
procedure TForm1.FormCreate(Sender: TObject);
begin
FDConnection1.Connected := True;
LoadMongoDataToGrid;
end;ملاحظات:
يمكنك تعديل الحقول بحسب البنية الحقيقية للـ Document في MongoDB.
إذا كان لديك حقول داخلية (مثل address.city)، فستحتاج إلى الوصول إليها باستخدام AsDocument.GetValue(...).
لتحديث البيانات في DBGrid بعد إضافة أو حذف، استدعِ LoadMongoDataToGrid مرة أخرى.
إذا رأيت منتجاً مجانياً فأعلم بأنك أنت السّلعة


![[-]](https://delphi4arab.net/forum/D4A2020/collapse.png)