検索

216.5. MongoDB 操作 - プロデューサーエンドポイント

download PDF

216.5.1. クエリー操作

216.5.1.1. findById

この操作は、_id フィールドが IN メッセージボディーの内容と一致するコレクションから 1 つの要素のみを取得します。受信オブジェクトは、BSON タイプと同等のものをすべて使用できます。http://bsonspec.org//specification[http://bsonspec.org//specification] および http://www.mongodb.org/display/DOCS/Java+Types を参照してください。

from("direct:findById")
    .to("mongodb:myDb?database=flights&collection=tickets&operation=findById")
    .to("mock:resultFindById");
ヒント

オプションのパラメーター をサポートします。この操作は、フィールドフィルターの指定をサポートします。「 オプションのパラメーターの指定 」を参照してください。

216.5.1.2. findOneByQuery

この操作を使用して、MongoDB クエリーに一致するコレクションから 1 つの要素のみを取得します。クエリーオブジェクトは IN メッセージボディーから抽出 ます。JSON String または Hashmap を使用できます。詳細は 、「タイプ変換 」を参照してください。

クエリーのない例(コレクションのオブジェクトを返します)。

from("direct:findOneByQuery")
    .to("mongodb:myDb?database=flights&collection=tickets&operation=findOneByQuery")
    .to("mock:resultFindOneByQuery");

クエリーを使用する例(一致する 1 つの結果を返す):

from("direct:findOneByQuery")
    .setBody().constant("{ \"name\": \"Raul Kripalani\" }")
    .to("mongodb:myDb?database=flights&collection=tickets&operation=findOneByQuery")
    .to("mock:resultFindOneByQuery");
ヒント

オプションのパラメーター をサポートします。この操作は、フィールドフィルターや sort 句の指定をサポートします。「 オプションのパラメーターの指定 」を参照してください。

216.5.1.3. findAll

findAll 操作は、クエリーに一致するドキュメントをすべて返します。そうでない場合は、コレクションに含まれるすべてのドキュメントが返されます。クエリーオブジェクトは IN メッセージボディーから抽出 ます。JSON String または Hashmap を使用できます。詳細は 、「タイプ変換 」を参照してください。

クエリーなしの例(コレクション内のすべてのオブジェクトを返します)。

from("direct:findAll")
    .to("mongodb:myDb?database=flights&collection=tickets&operation=findAll")
    .to("mock:resultFindAll");

クエリーを使用する例(一致するすべての結果を返します)。

from("direct:findAll")
    .setBody().constant("{ \"name\": \"Raul Kripalani\" }")
    .to("mongodb:myDb?database=flights&collection=tickets&operation=findAll")
    .to("mock:resultFindAll");

ページングと効率的な取得は、以下のヘッダーでサポートされます。

ヘッダーキークイック定数説明(MongoDB API ドキュメントから抽出)想定されるタイプ

CamelMongoDbNumToSkip

MongoDbConstants.NUM_TO_SKIP

カーソルの先頭にある特定の数の要素を破棄します。

int/Integer

CamelMongoDbLimit

MongoDbConstants.LIMIT

返される要素の数を制限します。

int/Integer

CamelMongoDbBatchSize

MongoDbConstants.BATCH_SIZE

1 つのバッチで返される要素の数を制限します。通常、カーソルは結果オブジェクトのバッチを取得し、ローカルに保存します。batchSize が正である場合、取得されるオブジェクトの各バッチのサイズを表します。これは、パフォーマンスを最適化し、データ転送を制限するように調整することができます。batchSize が負の値の場合、最大バッチサイズ制限(通常は 4MB)内で一致するオブジェクトの数を制限し、カーソルが閉じられます。たとえば、batchSize が -10 の場合、サーバーは最大 10 つのドキュメントを返し、4MB に収まらない数と同じものを返し、カーソルを閉じます。この機能は、ドキュメントが最大サイズ内に収まる必要がある点で limit()とは異なり、カーソルサーバー側でリクエストを送信する必要がなくなります。バッチサイズは、カーソルが反復された後でも変更できます。この場合、次のバッチ取得に設定が適用されます。

int/Integer

また、上記のヘッダーを設定するよりも簡単なエンドポイントオプションとして outputType=DBCursor(Camel 2.16+)を含めることで、サーバーからルートへ返されたドキュメントを「ストリーム」することもできます。これにより、Mongo シェルで findAll()を実行していたのと同様に、Mongo ドライバーから DBCursor が操作し、ルートが結果を繰り返し処理できるようになります。デフォルトでは、このオプションがないと、このコンポーネントはドライバーのカーソルから List にドキュメントを読み込んで、ルートに戻ります。これにより、多数のインメモリーオブジェクトが発生する可能性があります。DBCursor を使用すると、一致するドキュメントの数が尋ねられない点に注意してください。詳細は、MongoDB のドキュメントサイトを参照してください。

outputType=DBCursor および batch size オプションを使用する例:

from("direct:findAll")
    .setHeader(MongoDbConstants.BATCH_SIZE).constant(10)
    .setBody().constant("{ \"name\": \"Raul Kripalani\" }")
    .to("mongodb:myDb?database=flights&collection=tickets&operation=findAll&outputType=DBCursor")
    .to("mock:resultFindAll");

findAll 操作は、ページングを使用している場合に結果ページを繰り返し処理できるように、以下の OUT ヘッダーも返します。

ヘッダーキークイック定数説明(MongoDB API ドキュメントから抽出)データ型

CamelMongoDbResultTotalSize

MongoDbConstants.RESULT_TOTAL_SIZE

クエリーに一致するオブジェクトの数。これには制限や省略は行われません。

int/Integer

CamelMongoDbResultPageSize

MongoDbConstants.RESULT_PAGE_SIZE

クエリーに一致するオブジェクトの数。これには制限や省略は行われません。

int/Integer

ヒント

オプションのパラメーター をサポートします。この操作は、フィールドフィルターや sort 句の指定をサポートします。「 オプションのパラメーターの指定 」を参照してください。

216.5.1.4. count

コレクション内のオブジェクトの合計数を返し、Long を OUT メッセージボディーとして返します。
以下の例は、「dynamicCollectionName」コレクション内のレコード数をカウントします。動的性が有効であるか、その結果、操作は「notableScientists」コレクションに対しては実行されませんが、「dynamicCollectionName」コレクションに対しては実行されません。

// from("direct:count").to("mongodb:myDb?database=tickets&collection=flights&operation=count&dynamicity=true");
Long result = template.requestBodyAndHeader("direct:count", "irrelevantBody", MongoDbConstants.COLLECTION, "dynamicCollectionName");
assertTrue("Result is not of type Long", result instanceof Long);

Camel 2.14 以降では、メッセージボディーにクエリーとして com.mongodb.DBObject オブジェクトを指定でき、操作はこの条件に一致するドキュメントの量を返します。 

 

DBObject query = ...
Long count = template.requestBodyAndHeader("direct:count", query, MongoDbConstants.COLLECTION, "dynamicCollectionName");

216.5.1.5. フィールドフィルター(プロジェクト)の指定

クエリー操作は、デフォルトで(すべてのフィールドを含む)一致するオブジェクトを完全に返します。ドキュメントが大きい場合に、フィールドのサブセットのみを取得する必要がある場合は、CamelMongoDbFieldsFilter ヘッダーで関連する DBObject (または JSON 文字列、マップなど)を DBObject に設定するだけで、すべてのクエリー操作でフィールドフィルターを指定 できます

以下は、MongoDB の BasicDBObjectBuilder を使用して DBObject の作成を単純化する例です。これは、_id および boringField を除くすべてのフィールドを取得します。

// route: from("direct:findAll").to("mongodb:myDb?database=flights&collection=tickets&operation=findAll")
DBObject fieldFilter = BasicDBObjectBuilder.start().add("_id", 0).add("boringField", 0).get();
Object result = template.requestBodyAndHeader("direct:findAll", (Object) null, MongoDbConstants.FIELDS_FILTER, fieldFilter);

216.5.1.6. sort 句の指定

特定のフィールドで並び替えに基づき、コレクションから min/max レコードを取得する必要がしばしばあります。Mongo では、以下のような構文を使用して操作が実行されます。

db.collection.find().sort({_id: -1}).limit(1)
// or
db.collection.findOne({$query:{},$orderby:{_id:-1}})

Camel ルートでは、SORT_BY ヘッダーを findOneByQuery 操作とともに使用して、同じ結果を得ることができます。FIELDS_FILTER ヘッダーも指定された場合、操作は別のコンポーネントに直接渡すことができる単一のフィールド/値のペアを返します(パラメーター化された MyBatis SELECT クエリーなど)。以下の例は、コレクションから一時的な最新ドキュメントを取得し、documentTimestamp フィールドに基づいて結果を 1 つのフィールドに減らす方法を示しています。

.from("direct:someTriggeringEvent")
.setHeader(MongoDbConstants.SORT_BY).constant("{\"documentTimestamp\": -1}")
.setHeader(MongoDbConstants.FIELDS_FILTER).constant("{\"documentTimestamp\": 1}")
.setBody().constant("{}")
.to("mongodb:myDb?database=local&collection=myDemoCollection&operation=findOneByQuery")
.to("direct:aMyBatisParameterizedSelect")
;
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.