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


218.5.1. クエリー操作

218.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("mongodb3:myDb?database=flights&collection=tickets&operation=findById")
    .to("mock:resultFindById");
Copy to Clipboard Toggle word wrap
ヒント

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

218.5.1.2. findOneByQuery

この操作を使用して、MongoDB クエリーに一致するコレクションから要素(最初)のみを取得します。クエリーオブジェクトは CamelMongoDbCriteria ヘッダーから抽出され ます。CamelMongoDbCriteria ヘッダーが null の場合、クエリーオブジェクトはメッセージボディーを抽出されます。つまり、Bson タイプであるか、Bson に変換する必要があります。JSON String または Hashmap を使用できます。詳細は、「 #Type conversions 」を参照してください。MongoDB ドライバーの Filters クラスを使用できます。

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

from("direct:findOneByQuery")
    .to("mongodb3:myDb?database=flights&collection=tickets&operation=findOneByQuery")
    .to("mock:resultFindOneByQuery");
Copy to Clipboard Toggle word wrap

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

from("direct:findOneByQuery")
    .setHeader(MongoDbConstants.CRITERIA, Filters.eq("name", "Raul Kripalani"))
    .to("mongodb3:myDb?database=flights&collection=tickets&operation=findOneByQuery")
    .to("mock:resultFindOneByQuery");
Copy to Clipboard Toggle word wrap
ヒント

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

218.5.1.3. findAll

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

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

from("direct:findAll")
    .to("mongodb3:myDb?database=flights&collection=tickets&operation=findAll")
    .to("mock:resultFindAll");
Copy to Clipboard Toggle word wrap

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

from("direct:findAll")
    .setHeader(MongoDbConstants.CRITERIA, Filters.eq("name", "Raul Kripalani"))
    .to("mongodb3:myDb?database=flights&collection=tickets&operation=findAll")
    .to("mock:resultFindAll");
Copy to Clipboard Toggle word wrap

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

Expand
ヘッダーキークイック定数説明(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=MongoIterable および batch size オプションを使用する例:

from("direct:findAll")
    .setHeader(MongoDbConstants.BATCH_SIZE).constant(10)
    .setHeader(MongoDbConstants.CRITERIA, Filters.eq("name", "Raul Kripalani"))
    .to("mongodb3:myDb?database=flights&collection=tickets&operation=findAll&outputType=MongoIterable")
    .to("mock:resultFindAll");
Copy to Clipboard Toggle word wrap

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

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

CamelMongoDbResultTotalSize

MongoDbConstants.RESULT_TOTAL_SIZE

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

int/Integer

CamelMongoDbResultPageSize

MongoDbConstants.RESULT_PAGE_SIZE

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

int/Integer

ヒント

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

218.5.1.4. count

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

// from("direct:count").to("mongodb3: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);
Copy to Clipboard Toggle word wrap

クエリー オブジェクトは CamelMongoDbCriteria ヘッダーから抽出されるクエリー を指定できます。CamelMongoDbCriteria ヘッダーが null の場合、クエリーオブジェクトは抽出メッセージのボディーを抽出されます。つまり、タイプは Bson か、Bson に変換する必要があります。操作では、この基準に一致するドキュメントの量を返します。  

Document query = ...
Long count = template.requestBodyAndHeader("direct:count", query, MongoDbConstants.COLLECTION, "dynamicCollectionName");
Copy to Clipboard Toggle word wrap

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

クエリー操作は、デフォルトで(すべてのフィールドを含む)一致するオブジェクトを完全に返します。ドキュメントが大きい場合に、フィールドのサブセットのみを取得する必要がある場合は、CamelMongoDbFieldsProjection ヘッダー、MongoDbFieldsProjection ヘッダー、MongoDbFieldsProjection ヘッダー、MongoDbConstants.FIELDS_PROJECTION などの関連する Bson (または型変換)を設定して、すべてのクエリー操作でフィールドフィルターを指定できます。

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

// route: from("direct:findAll").to("mongodb3:myDb?database=flights&collection=tickets&operation=findAll")
Bson fieldProjection = Projection.exclude("_id", "boringField");
Object result = template.requestBodyAndHeader("direct:findAll", ObjectUtils.NULL, MongoDbConstants.FIELDS_PROJECTION, fieldProjection);
Copy to Clipboard Toggle word wrap

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

// route: from("direct:findAll").to("mongodb3:myDb?database=flights&collection=tickets&operation=findAll")
Bson fieldProjection = Projection.exclude("_id", "boringField");
Object result = template.requestBodyAndHeader("direct:findAll", ObjectUtils.NULL, MongoDbConstants.FIELDS_PROJECTION, fieldProjection);
Copy to Clipboard Toggle word wrap

218.5.1.6. sort 句の指定

MongoDB の Sort を使用して Bson の作成を単純化する特定のフィールドによるソートに基づいて、コレクションから min/max レコードを取得する要件がよくあります。これは、_id および boringField を除くすべてのフィールドを取得します。

// route: from("direct:findAll").to("mongodb3:myDb?database=flights&collection=tickets&operation=findAll")
Bson sorts = Sorts.descending("_id");
Object result = template.requestBodyAndHeader("direct:findAll", ObjectUtils.NULL, MongoDbConstants.SORT_BY, sorts);
Copy to Clipboard Toggle word wrap

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

.from("direct:someTriggeringEvent")
.setHeader(MongoDbConstants.SORT_BY).constant(Sorts.descending("documentTimestamp"))
.setHeader(MongoDbConstants.FIELDS_PROJECTION).constant(Projection.include("documentTimestamp"))
.setBody().constant("{}")
.to("mongodb3:myDb?database=local&collection=myDemoCollection&operation=findOneByQuery")
.to("direct:aMyBatisParameterizedSelect")
;
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat