第18章 MongoDB への接続

MongoDB は分散型 NoSQL データベースです。Fuse Online インテグレーションは MongoDB データベースからコンテンツを取得したり、MongoDB データベースでコンテンツを更新したりできます。これには、MongoDB コネクションを作成し、インテグレーションに追加します。

MongoDB データベースへの接続に関する詳細は、以下を参照してください。

18.1. MongoDB データベースへの接続の作成

MongoDB コネクションを作成して、インテグレーションで MongoDB データベースに接続できるようにします。

前提条件

  • 接続する MongoDB データベースのホスト名を知っておく必要があります。
  • MongoDB データベースへのアクセスが許可されるユーザー名とパスワードが必要です。

手順

  1. Fuse Online の左パネルで Connections をクリックし、利用可能なコネクションを表示します。
  2. Create Connection をクリックしてコネクターを表示します。
  3. MongoDB コネクターをクリックします。
  4. コネクションを設定します。

    1. Database host(s) フィールドに、このコネクションがアクセスできる MongoDB データベースホストを 1 つ以上指定します。複数の host:port を指定する場合はコンマで区切ります。host はホスト名、仮想ホスト名、または IP アドレスに置き換えます。例: mongodb0.example.com:1234,mongodb1.example.com:1234
    2. Username フィールドに、データベースへのアクセスが許可されるユーザー名を入力します。
    3. Password フィールドに、指定したユーザー名のパスワードを入力します。
    4. 任意手順:データベースに管理データベースがある場合は、Administration database フィールドにアクセス権限を付与するために使用される MongoDB 管理データベースの名前を入力します。アクセスするデータベースに管理データベースがあるかどうかを確認するには、MongoDB の管理者に問い合わせます。
    5. 任意手順:コネクションがアクセスできる MongoDB レプリカセット (クラスター) の名前を Replica set name フィールドに指定します。
    6. Database フィールドに、コネクションが読み取るコレクションが含まれる MongoDB データベースの名前を入力します。
  5. Validate をクリックします。Fuse Online は即座にコネクションを検証しようとし、検証の成功または失敗を示すメッセージを表示します。検証に失敗した場合は、入力パラメーターを訂正し、再度検証を行います。
  6. 検証に成功したら Next をクリックします。
  7. Name フィールドに、このコネクションを別のコネクションと区別するために使用する名前を入力します。たとえば、MongoDB North を入力します。
  8. Description は任意のフィールドで、このコネクションに関する便利な情報を入力します。
  9. Save をクリックし、作成したコネクションが利用可能になったことを確認します。上記の例の名前を入力した場合は、インテグレーションに追加できるコネクションとして MongoDB North が表示されます。

次のステップ

MongoDB コネクションをインテグレーションに追加します。

18.2. MongoDB コレクションの更新時にインテグレーションをトリガー

ドキュメントが MongoDB コレクションに追加されたときにインテグレーションの実行をトリガーするには、MongoDB コネクションを最初のコネクションとしてシンプルなインテグレーションに追加します。インテグレーションの稼働時、MongoDB コネクションはインテグレーションの作成時に指定したデータベースコレクションを監視します。コネクションが監視するように設定されたコレクションに新しいドキュメントを挿入すると、インテグレーションの実行がトリガーされます。MongoDB コネクションによって新しいドキュメントがインテグレーションに返されます。このデータはインテグレーションの次のステップで使用できます。

前提条件

  • MongoDB コネクションが作成されている必要があります。
  • コネクションが読み取る MongoDB コレクションの名前を知っておく必要があります。
  • コネクションが監視するコレクションが Capped Collection である場合、以下も知っておく必要があります。

    • 受信ドキュメントを追跡する MongoDB コレクションフィールドの名前。
    • コレクションが含まれるデータベースの永続追跡が有効になっているかどうか。
    • コネクションが読み取るデータに関連するテールトラッキング (Tail tacking) 情報の指定方法。MongoDB コネクションは、コネクションが予期せず終了した後に、テールトラッキング情報を使用してアクションを再開します。テールトラッキングは、コネクションがアクティビティーを再開したときに、重複したデータをインテグレーションに返さないようにしたり、インテグレーションに返す必要のあるデータを失わないようにします。

手順

  1. Fuse Online パネルの左側にある Integrations をクリックします。
  2. Create Integration をクリックします。
  3. Choose a connection ページで、インテグレーションが更新を取得するデータベースにアクセスするよう設定された、MongoDB コネクションをクリックします。
  4. Choose an action ページで、以下のアクションの 1 つを選択します。

    • 通常、Retrieve documents (stream) をアクションとして選択します。Capped Collection でないものからデータを取得します。
    • Retrieve documents (tail) は Capped Collection からデータを取得するアクションです。
  5. アクションを設定するには以下を行います。

    1. Collection name フィールドに、コネクションが読み取る MongoDB コレクションの名前を入力します。

      Retrieve documents (stream) アクションを設定する場合、これが唯一必要なパラメーターになります。ステップ 6 に移動します。Retrieve document (tail) アクションを設定する場合は、残りのサブステップにしたがいます。

    2. Collection field used to track incoming documents フィールドに、関連する MongoDB コレクションフィールドの名前を入力します。このフィールドには、日付や ID などのソート可能なデータが含まれます。
    3. コネクションが読み取るデータベースの永続追跡が有効になっている場合は、Persistent tracking enabled チェックボックスを選択します。
    4. 任意手順:同じコレクションを監視する複数のコンシューマーがある場合は、Unique id to identify this tracking process フィールドに、一意の ID を指定します。詳細は、Camel ドキュメントの「Tailable Cursor Consumer」を参照してください。
    5. 任意手順:DB used to store tail tracking フィールドにテールトラッキング情報が含まれる MongoDB データベースの名前を入力します。
    6. 任意手順:Collection used to store tail tracking フィールドにテールトラッキング情報が含まれるコレクションの名前を入力します。
    7. 任意手順:Field used to store tail tracking フィールドに、このコネクションが読み取るコレクションのテールトラッキング情報を保存するフィールドの名前を入力します。

    テールトラッキングフィールドを特定するために、テールトラッキングデータベースまたはテールトラッキングコレクションを指定できます。いずれかの情報を指定すると、コネクションはテールトラッキングフィールドを特定できます。

  6. Next をクリックして、アクションの出力タイプを指定します。
  7. データタイプの認識が必要がない場合は、Select Type フィールドに Type specification not required を使用し、Next をクリックします。残りの手順を行う必要はありません。

    ただし、構造化データタイプが推奨されます。たとえば、コネクション出力をデータマッパーステップでマップする場合、データタイプを指定する必要があります。データマッパーは、非構造化データのフィールドを表示できません。

    データタイプを指定するには、Select Type フィールドをクリックし、以下の 1 つをスキーマタイプとして選択します。

    • JSON schema は JSON データの構造を記述するドキュメントです。ドキュメントのメディアタイプは application/schema+json です。
    • JSON instance は JSON データが含まれるドキュメントです。ドキュメントのメディアタイプは application/json です。
    • XML schema は XML データの構造を記述するドキュメントです。このドキュメントのファイル拡張子は .xsd です。
    • XML instance は XML データが含まれるドキュメントです。このドキュメントのファイル拡張子は .xml です。
  8. Definition 入力ボックスに、選択したスキーマタイプに準拠する定義を貼り付けます。たとえば、JSON schema を選択した場合は、メディアタイプが application/schema+json の JSON スキーマファイルの内容を貼り付けます。
  9. Data Type Name フィールドにはデータタイプに選択した名前を入力します。たとえば、ベンダーの JSON スキーマを指定する場合は、Vendor をデータタイプ名として指定することができます。

    このタイプを指定するコネクションを使用するインテグレーションを作成または編集するときにこのデータタイプ名が表示されます。Fuse Online では、インテグレーションビジュアライゼーションとデータマッパーにタイプ名が表示されます。

  10. Data Type Description フィールドには、このタイプを区別するのに便利な情報を提供します。データマッパーでこのタイプを処理するステップにカーソルを合わせると、この説明が表示されます。
  11. Next をクリックします。

結果

インテグレーションに最初のコネクションが追加され、Fuse Online は最後のコネクションを選択するよう要求します。

実行中、コネクションは挿入されたドキュメントを JSON 形式で返します。

18.3. MongoDB コレクションのドキュメントの操作

インテグレーションでは、MongoDB コレクションでドキュメントを検索、更新、削除、削除、カウント、または追加できます。これには、MongoDB コネクションをフローの途中に追加するか、シンプルなインテグレーションの最後のコネクションとして追加します。

前提条件

  • MongoDB コネクションが作成されている必要があります。
  • コネクションが操作する MongoDB コレクションの名前を知っておく必要があります。
  • インテグレーションを作成または編集することになります。Fuse Online でインテグレーションに追加するよう要求されます。または、Fuse Online で最後のコネクションを選択するよう要求されます。

手順

  1. Add to Integration ページで、MongoDB コネクションの追加先のプラス記号をクリックします。シンプルなインテグレーションの最後のコネクションを追加する場合は、このステップをスキップします。
  2. 使用する MongoDB コネクションをクリックします。
  3. Choose an action ページで、コネクションが実行するアクションを選択します。
  4. アクションを設定するには、Collection name フィールドに、コネクションが操作するコレクションの名前を入力します。

    Insert アクションを選択した場合:

    • 接続の設定が完了します。
    • インテグレーションによってこの MongoDB コネクションに渡されるデータに、コレクションに追加するドキュメントを指定する JSON 表記が含まれるようにしてください。
    • Next をクリックしてこのコネクションをインテグレーションに追加します。
  5. 以下の表には、他のアクションを設定する場合に、2 つ目のフィールドに指定するものが記載されています。

    2 つ目のフィールドは、操作するドキュメントや、場合によっては操作の詳細を特定する JSON 表記式になります。受信ソースフィールドを式の識別子にマップする計画がある場合は、式に :#variable-name を指定します。

    また、この表には Insert アクションに関する説明も記載されています。

    アクション動作の説明パラメーターフィールド戻り値

    Count

    指定の count 式を満たすドキュメントの数をカウントします。

    Count expression フィールドには、{"test":"unit"} の形式で JSON フィルター式を指定します。アクションは、test 属性の値が unit であるドキュメントの数をカウントします。

    見つかったドキュメントの数を指定する java.lang.Long のインスタンス。

    Delete

    コレクションから 1 つまたは複数のドキュメントを削除します。

    Delete expression フィールドには、{"test":"unit"} の形式で JSON 式を指定します。値が unit である test 属性がある各ドキュメントを削除します。

    削除されたドキュメントの数を指定する java.lang.Long のインスタンス。

    Find

    指定したフィルター式に一致するすべてのドキュメントを検索します。

    Filter expression フィールドに、1 つ以上のドキュメントを特定する JSON 表記文字列を指定します。

    リストを指定する JSON 表記 (配列)。各リスト要素は、フィルター式と一致するドキュメントを特定し、ドキュメントの内容を提供します。ドキュメントが見つからない場合、アクションによって空のリストが返されます。

    コレクションのデータモデルを理解できる必要があります。コレクションが JSON スキーマに準拠する場合、返されたリスト要素はこのスキーマに準拠するため、このスキーマを理解できる必要があります。詳細は「MongoDB Data Models」を参照してください。

    後続のデータマッパーステップで Find アクションからの出力データを使用するには、コレクションが JSON スキーマに準拠している必要があります。これにより、データマッパーはデータフィールドを表示できます。詳細は、JSON スキーマバリデーションに関する MongoDB ドキュメント を参照してください。

    Insert

    1 つまたは複数のドキュメントをコレクションに追加します。

    ドキュメントを挿入するためのアクション設定パラメーターはありません。MongoDB コネクションが受信するデータには、コレクションに追加する 1 つまたは複数のドキュメントを指定する JSON 表記が含まれている必要があります。

    リストを指定する JSON 表記 (配列)。各リスト要素はこのアクションによって挿入されたドキュメントです。

    Update

    コレクションの 1 つまたは複数のドキュメントを更新します。

    Filter criteria フィールドに、2 つの引数の配列を指定します。最初の引数は、更新するドキュメントを識別するフィルター式です。2 つ目の引数は、ドキュメントの更新方法を指定する MongoDB 更新ステートメントです。更新ステートメントの形式は、https://docs.mongodb.com/manual/reference/method/db.collection.update/ に説明されています。例: [{"_id":11},{$set: {"test":"updated!"}}]

    更新されたドキュメントの数を指定する java.lang.Long のインスタンス。

    Upsert

    Upsert expression に一致するドキュメントがない場合に、コレクションで 1 つ以上のドキュメントを更新するか、ドキュメントを作成します。

    Upsert expression フィールドに、1 つまたは複数のドキュメントを特定する JSON 表記を指定します。このアクションはこの式を使用して一致するドキュメントを検出します。コレクションで一致するドキュメントが見つからなかった場合、更新を行います。一致するドキュメントが見つからなかった場合、アクションによって新しいドキュメントが作成されます。MongoDB コネクションが受信するデータには、以下を指定する JSON 表記が含まれている必要があります。

    * 挿入または更新操作であるかどうかを識別するための _id フィールド。

    * 追加または更新するコンテンツ。

    更新されたドキュメントの数または新しい挿入されたドキュメントの ID を指定する com.mongodb.client.result.UpdateResult のインスタンス。

    各アクションは応答を返します。これが最後のコネクションである場合、応答は失われますが Log ステップを追加して応答をキャプチャーすることができます。

  6. Next をクリックします。
  7. 任意手順:これが最後のコネクションである場合、代わりに Log ステップを追加して、インテグレーションを終了します。Log ステップを設定して応答をキャプチャーします。

結果

インテグレーションビジュアライゼーションで追加した場所にコネクションが表示されます。

次のステップ

必要な他のコネクションをフローに追加します。データを処理する他のステップを追加します。必要なデータマッピングステップを追加してインテグレーションを完了します。MongoDB コネクションアクションの設定時、アクション式で :#variable-name 識別子をアクション式として指定した場合は、必ずソースフィールドを MongoDB コネクション変数フィールドにマップしてください。