top / index / prev / next / target / source

2016-01-07 diary: [Delphi] MongoDB への非ビジュアルアクセス方法のメモ

いがぴょんの日記 日記形式でつづる いがぴょんコラム ウェブページです。

[Delphi] MongoDB への非ビジュアルアクセス方法のメモ

FireMonkey ベースによる FireDAC を用いた非ビジュアルによる MongoDB アクセス方法をメモします。

利用したコンポーネントは以下です。

TFDConnection
TFDGUIxWaitCursor
TFDPhysMongoDriverLink
TFDMongoQuery
TDataSource
TMemo
TButton

以下のようにコードを記述すると、MongoDB 接続→検索→結果取得→項目のリスト表示 を実現することができます。ビジュアルプログラミングを行うと、これよりずっと少ないコード量で実装できますが、ここではあえて非ビジュアルによるプログラミングにて実装しています。

procedure TForm1.FormShow(Sender: TObject);
begin
  /// ///////////////////////////////////////////
  // 各種プロパティ設定(通常はコードではなくビジュアル設定します):開始

  // ドライバーを MongoDB にセット
  FDConnection1.DriverName := 'Mongo';
  FDConnection1.LoginPrompt := False;

  // 接続先のデータベース情報をセット
  FDMongoQuery1.DatabaseName := 'test';
  FDMongoQuery1.CollectionName := 'restaurants';

  // コンポーネントを関連付け
  FDMongoQuery1.Connection := FDConnection1;
  DataSource1.DataSet := FDMongoQuery1;

  // 各種プロパティ設定(通常はコードではなくビジュアル設定します):終了
  /// ///////////////////////////////////////////
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  FDMongoQuery1.Close;
  // 検索条件を設定
  FDMongoQuery1.QMatch := '{"cuisine": "Italian", "address.zipcode": "10075"}';
  FDMongoQuery1.Open;
  // 全件取得
  FDMongoQuery1.FetchAll;

  // 取得結果のヘッダ情報を画面(メモ項目)に表示
  Memo1.Lines.Clear;
  for i := 0 to DataSource1.DataSet.FieldCount - 1 do
    Memo1.Lines.Add(DataSource1.DataSet.FieldDefList.FieldDefs[i].Name);
end;

ネストした項目の取得

ネストした項目は、該当項目を取得した上でキャストすることによりアクセスが可能になります。 追加したコンポーネントは以下です。

TDataSource

「// 取得結果のヘッダ情報を画面(メモ項目)に表示」の一連のコードより後に以下のコードを追加すると、ネスト領域にアクセスができます。

  // ネストした項目を取得
  Memo1.Lines.Add('Nested fields');
  // データセットから grades というネスト項目をさらに取り出し。
  DataSource2.DataSet := (FDMongoQuery1.FieldByName('grades') as TDataSetField)
    .NestedDataSet;
  for i := 0 to DataSource2.DataSet.FieldDefList.Count - 1 do
    Memo1.Lines.Add(DataSource2.DataSet.FieldDefList.FieldDefs[i].Name);

登場キーワード


この日記について