التعامل مع قاعدة بيانات MongoDB باستخدام مكونات FireDAC في Delphi
#1
للتعامل مع قاعدة بيانات MongoDB باستخدام مكونات FireDAC في Delphi، يمكنك تنفيذ عمليات CRUD (إنشاء، قراءة، تحديث، حذف) على البيانات المخزنة بتنسيق JSON داخل مستندات MongoDB.

المتطلبات الأساسية
  • تأكد من أن خادم MongoDB يعمل ويمكن الوصول إليه من جهازك.
  • استخدم Delphi 10.4 أو إصدارًا أحدث، حيث تدعم هذه الإصدارات الاتصال بـ MongoDB عبر FireDAC.
  • تأكد من أن مكتبات MongoDB (libmongoc وlibbson) مثبتة ومهيأة بشكل صحيح

إعداد الاتصال بـ MongoDB
في Delphi، يمكنك استخدام مكونات FireDAC للاتصال بـ MongoDB. إليك كيفية إعداد الاتصال:
  1. إضافة المكونات:
    • أضف مكون
      كود :
      TFDConnection
      إلى النموذج.
    • أضف مكون
      كود :
      TFDPhysMongoDriverLink

  2. تكوين الاتصال:

كود :
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 مرة أخرى.
إذا رأيت منتجاً مجانياً فأعلم بأنك أنت السّلعة
[-] كل من 2 users say قال شكرا ل الفجر الابيض على المشاركة المفيدة
  • أبو معاذ, لؤي
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم