MongoDB コネクタ

Select

MongoDB コネクタは、Mule とサードパーティソフトウェアである MongoDB サーバ間の接続を可能にするクローズドソースのコネクタです。

前提条件

このドキュメントは、読者が MongoDB API に精通していることを前提としています。このコネクタを使用するには、以下が必要です。

  • MongoDB インスタンス

  • 一連の有効なログイン情報 (各自のインスタンスをポイントする、必須の MongoDB エンドポイントなど)

  • MuleSoft Enterprise ライセンス

このコネクタの新機能

  • Mule 4 のサポート。

  • このコネクタで、コレクション、ファイル、ドキュメントのメタデータが提供されるようになりました。

Design Center での接続方法

  1. Design Center で、[Set Up (セットアップ)] > [Upload (アップロード)] をクリックし、ファイルシステムにあるこのコネクタのドライバを参照して選択し、アップロードします。または、すでにアップロードされているドライバを検索して選択します。

  2. トリガをクリックします。トリガ時にこのコネクタを選択することで、グローバル要素を作成できます。 グローバル要素が不要な場合は、HTTP リスナまたはスケジューラトリガを使用できます。

  3. このコネクタのグローバル要素 (省略可能) を作成するには、次の項目を設定します。

    1. プラス記号を選択して、コンポーネントを追加します。

    2. コンポーネントとしてコネクタを選択します。

    3. 操作を選択します。

    4. MongoDB 設定をセットアップします。

      項目 説明

      Servers (サーバ)

      この場所は、デフォルトの MongoDB インスタンスをポイントします。

      Username (ユーザ名)

      MongoDB ユーザ名。

      Password (パスワード)

      MongoDB パスワード。

      Database (データベース)

      MongoDB データベース。

      Enable Metadata (メタデータの有効化)

      コレクション、ドキュメント、ファイルのメタデータを有効にします。

      Collection metadata samples (コレクションメタデータのサンプル)

      メタデータ構造を取得するために既存のコレクションを追加できます。

次の操作を選択して、シンプルなフローを作成できます。

  • Insert Document

    項目 説明

    Collection Name (コレクション名)

    この場所は、任意のコレクションをポイントします。このコレクションは、以前に選択したデータベースで作成されている必要があります。

  • Find one and Update Document

  • Remove Document

Anypoint Studio 7 での接続

Studio で設定する

pom.xml ファイルに連動関係を配置する必要があります。

<dependency>
  <groupId>org.mule.connectors</groupId>
  <artifactId>mule-mongo-connector</artifactId>
  <version>5.0.0</version>
</dependency>

グローバル設定のセットアップ方法

  1. [Global Elements (グローバル要素)] タブに移動して、[Create (作成)] をクリックします。

  2. [Connector Configuration (コネクタ設定)] ディレクトリで MongoDB を検索します。

  3. 任意のグローバル要素を選択すると、入力するグローバル要素プロパティが表示されます。

    1. 接続の種別を選択します。

    2. [Username (ユーザ名)] 項目は、MongoDB インスタンスへのアクセスに使用するユーザ名になります。

    3. [Password (パスワード)] 項目は対応するパスワードにする必要があります。

    4. また、MongoDB インスタンスからのデータの送受信に使用するデータベースも指定する必要があります。アプリケーションを実行する前に、ユーザに必要な権限があることを確認します。

    5. さらに、host:port のカンマ区切りのリストで構成されるサーバプロパティを設定する必要のあることがあります (レプリカセットがある場合)。この属性は省略可能で、空のままにするとデフォルトの localhost:27017 に設定されます。

    6. [Connection (接続)] タブで、MongoDB に送信される要求の接続タイムアウト、ホストあたりの接続数、最大待機時間、ソケットタイムアウトの値を調整できます。 接続タイムアウトのデフォルト値は 30000 ミリ秒です。つまり、接続要求の送受信に 30 秒以上かかると例外が生じます。この動作は上書きできます。値を 0 に設定すれば、要求を正常に送信し、応答を受信するまで MongoDB コネクタが無限に待機します。

    7. メタデータを有効にするかどうかを設定したり、コレクションのサンプルを追加したりすることもできます。

次に、[Connection (接続)] 項目値に Spring プロパティのプレースホルダを指定した MongoDB 設定を示します。アプリケーションを CloudHub または Mule ESB サーバにデプロイする予定の場合はこの方法をお勧めします。ただし、開発段階で、単に処理を加速したいだけの場合は、以下に示すグローバル要素のプロパティで接続ログイン情報をハードコード化することもできます。

項目 説明

Servers (サーバ)

この場所は、デフォルトの MongoDB インスタンスをポイントします。

Username (ユーザ名)

MongoDB ユーザ名。

Password (パスワード)

MongoDB パスワード。

Database (データベース)

MongoDB データベース。

Enable Metadata (メタデータの有効化)

コレクション、ドキュメント、ファイルのメタデータを有効にします。

Collection metadata samples (コレクションメタデータのサンプル)

メタデータ構造を取得するために既存のコレクションを追加できます。

SSL (省略可能) を使用したグローバル設定のセットアップ

MongoDB コネクタ v4.0.0 では、SSL の使用がサポートされています。グローバル設定のセットアップ方法

  • MongoDB 接続の [Global Elements (グローバル要素)] タブにある [Connection (接続)] タブで、「正確」な SSL プロパティ項目を選択していることを確認します。

  • 前述のとおり、インスタンスでこの機能をサポートしている必要があります。

ユースケース: Studio

シンプルな操作 (Insert Document 操作など) を呼び出す手順は、次のとおりです。

  1. パレットから [MongoDB] モジュールを選択し、[Insert Document] をドラッグして、フローの [HTTP Listener (HTTP リスナ)] の後にドロップします。

  2. 前のセクションで作成した [Connector Configuration (コネクタ設定)] を選択し、呼び出す操作を選択してコネクタを設定してから、[Collection name (コレクション名)] を設定します。

  3. パレットから、[Transform Message] コンポーネントをドラッグして MongoDB コネクタの前にドロップします。

  4. [Transform Message] をクリックして、次のとおり 2 つのキー-値のペアを入力します。

    %dw 2.0
    %output application/json
    ---
    {
    	name:"Peter",
    	age:"42"
    }
  5. パレットから、別の [Transform Message] コンポーネントをドラッグして MongoDB コネクタの後にドロップします。

  6. 新しい [Transform Message] をクリックして、出力を application/json に設定します。

    %dw 2.0
    output application/json
    ---
    payload
  7. フローの他のオプションとして、Find One Document、Remove Documents、Update Document があります。

    1. Update Document

    2. Remove Documents

    3. Find One Document

ユースケース: XML

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:mongo="http://www.mulesoft.org/schema/mule/mongo"
      xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core" xmlns:http="http://www.mulesoft.org/schema/mule/http"
      xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd
http://www.mulesoft.org/schema/mule/mongo http://www.mulesoft.org/schema/mule/mongo/current/mule-mongo.xsd">
    <configuration-properties file="mule-app.properties" />
    <http:listener-config name="HTTP_Listener_config"
                          doc:name="HTTP Listener config" doc:id="08508a01-02c3-435a-a17a-b9149204cdfb">
        <http:listener-connection host="0.0.0.0"
                                  port="8081" />
    </http:listener-config>
    <mongo:config name="MongoDB_Config" doc:name="MongoDB Config"
                  doc:id="7de194db-4d35-4fe4-819b-2687710c2a39">
        <mongo:connection username="${username}" password="${password}"
                          database="${database}" host="${host}" />
    </mongo:config>
    <flow name="html-form-flow" doc:id="4512071a-09a9-4364-a47e-7ddc9632da6a">
        <http:listener config-ref="HTTP_Listener_config" path="/"
                       doc:name="Listener" doc:id="4ca0db5c-7bd8-48eb-8b72-fdd15bf44d23" />
        <parse-template location="form.html" doc:name="Parse Template"
                        doc:id="a58bf0d5-525e-4127-95eb-6566ffe111a6" />
    </flow>
    <flow name="create-mongo-record-flow" doc:id="e9fd320c-912c-4063-9cf5-354c2c34a82d">
        <http:listener config-ref="HTTP_Listener_config" path="/create"
                       doc:name="Listener" doc:id="a119b648-2721-46fc-9c4a-12126ee2d806" />
        <ee:transform doc:name="Set Payload and Document Content"
                      doc:id="8c3f3ee7-e3d9-4682-af4d-63af3fdab88f">
            <ee:message>
                <ee:set-payload><![CDATA[%dw 2.0
output application/json
---
{
	"content": payload.message
}]]></ee:set-payload>
            </ee:message>
            <ee:variables>
                <ee:set-variable variableName="content"><![CDATA[%dw 2.0
output application/java
---
payload.message]]></ee:set-variable>
            </ee:variables>
        </ee:transform>
        <logger level="INFO" doc:name="Logger"
                doc:id="2e9de838-21b9-4b18-a7e3-db8f6351e9a5"
                message="#['Creating record in Mongo. Message will be: ' ++ payload.content]" />
        <mongo:insert-document config-ref="MongoDB_Config"
                               doc:name="Insert document" doc:id="438f9ae2-f823-442e-8154-1d09e407a600"
                               collectionName="${collection}" />
        <logger level="INFO" doc:name="Logger" doc:id="0ef68faf-da4c-4be2-baba-34a5c0f370e5" message="#['ID of the new document: ' ++ payload]" />
        <ee:transform doc:name="Set Payload"
                      doc:id="34f0f8aa-f67c-4005-a492-dd8286ecae66">
            <ee:message>
                <ee:set-payload><![CDATA[%dw 2.0
output application/json
---
vars.content]]></ee:set-payload>
            </ee:message>
        </ee:transform>
    </flow>
    <flow name="read-mongo-record-flow" doc:id="a8725a0b-d3bc-4c4e-8f5f-15089a923a05">
        <http:listener config-ref="HTTP_Listener_config" path="/read"
                       doc:name="Listener" doc:id="c2445e45-a15c-4990-8c9f-a2ac09829556" />
        <ee:transform doc:name="Set Payload"
                      doc:id="edc7f4ec-9bc2-4903-82fd-bff55a30a667">
            <ee:message >
                <ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
{
	content: payload.message
}]]></ee:set-payload>
            </ee:message>
        </ee:transform>
        <logger level="INFO" doc:name="Logger" doc:id="a076ee0c-fb81-4154-bc07-3dc0d60fbdeb" message="#['Finding a single record that has content equal to: ' ++ payload.content]" />
        <mongo:find-one-document config-ref="MongoDB_Config" collectionName="${collection}" doc:name="Find one document" doc:id="fe82172b-2ce0-461e-b196-50e1186cd247" />
        <ee:transform doc:name="Set Payload for Document ID" doc:id="19d25266-1e2b-4ece-883a-6c4683f70148" >
            <ee:message >
                <ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload.'_id'.'\$oid'
]]></ee:set-payload>
            </ee:message>
        </ee:transform>
        <logger level="INFO" doc:name="Logger" doc:id="e0ee28cd-dfb1-49db-8dfc-30c1dcf01d63" message="#['ID of the found document: ' ++ payload]"/>
    </flow>
    <flow name="update-mongo-record-flow" doc:id="3e2ae866-c481-42b8-9c09-ae4d22ba911b" >
        <http:listener config-ref="HTTP_Listener_config" path="/update" doc:name="Listener" doc:id="17dc917b-bb4b-4db7-906b-83ca3e9b569e" />
        <ee:transform doc:name="Set payload and query" doc:id="22b3e519-b3a7-492f-8329-9defdcd9d3cf" >
            <ee:message >
                <ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
{
	content: payload.updateValue
}]]></ee:set-payload>
            </ee:message>
            <ee:variables >
                <ee:set-variable variableName="query" ><![CDATA[%dw 2.0
output application/json
---
{
	"_id" : {
        "\$oid": payload.updateObjectId
    }
}]]></ee:set-variable>
            </ee:variables>
        </ee:transform>
        <logger level="INFO" doc:name="Logger" doc:id="5957010f-4661-4c00-913e-007923cadae0" message="#['New message: ' ++ payload.content]" />
        <mongo:update-documents config-ref="MongoDB_Config" collectionName="${collection}" doc:name="Update documents" doc:id="7c36057c-eb91-437d-9eae-00aa50ea412b">
            <mongo:find-query ><![CDATA[#[vars.query]]]></mongo:find-query>
            <mongo:content-to-update ><![CDATA[#[payload]]]></mongo:content-to-update>
        </mongo:update-documents>
        <ee:transform doc:name="Set Payload for Document ID" doc:id="e8f85634-a266-4f3a-ba4d-50545efea6b7" >
            <ee:message >
                <ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
vars.query[0][0]]]></ee:set-payload>
            </ee:message>
        </ee:transform>
    </flow>
    <flow name="delete-mongo-record-flow" doc:id="2b50ab1d-68da-4c4b-91df-5193c9b51668" >
        <http:listener config-ref="HTTP_Listener_config" path="/delete" doc:name="Listener" doc:id="71f27d06-91f1-4b0f-876f-44bed8b31853" />
        <ee:transform doc:name="Set Payload" doc:id="cd4f10f6-d320-4da4-8b19-b75c0197d81a" >
            <ee:message >
                <ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
{
	"_id" : {
        "\$oid": payload.deleteObjectId
    }
}]]></ee:set-payload>
            </ee:message>
        </ee:transform>
        <logger level="INFO" doc:name="Logger" doc:id="99dc481b-ab95-47c2-a905-f6fa0bda0fbc" message="#['Deleting entry from Mongo with ID : ' ++ payload[0][0]]" />
        <mongo:remove-documents config-ref="MongoDB_Config" collectionName="${collection}" doc:name="Remove documents" doc:id="86b9603b-a463-45ef-ace8-6f68c2c3aaaf" />
        <ee:transform doc:name="Set message for delete document" doc:id="5d298c93-2129-4216-9667-08e937315f07" >
            <ee:message >
                <ee:set-payload ><![CDATA[%dw 2.0
output application/java
---
"Entry was deleted from MongoDB" as String]]></ee:set-payload>
            </ee:message>
        </ee:transform>
        <logger level="INFO" doc:name="Logger" doc:id="e4063c9d-f120-47a9-a90d-79d7a2a233aa" message="#[payload]"/>
    </flow>
</mule>

Was this article helpful?

💙 Thanks for your feedback!

Edit on GitHub