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


35.7.1. クエリー操作

35.7.1.1. findById

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

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

デフォルトの _id は、ObjectId タイプおよび ObjectId タイプとして Mongo によって処理されるため、適切に変換する必要がある場合があります。

from("direct:findById")
    .convertBodyTo(ObjectId.class)
    .to("mongodb:myDb?database=flights&collection=tickets&operation=findById")
    .to("mock:resultFindById");
注記

オプションのパラメーターをサポートします
この操作はプロジェクション演算子をサポートします。Specifying a fields filter (projection) を参照してください。

35.7.1.2. findOneByQuery

MongoDB クエリーセレクターに一致するコレクションから最初の要素を取得します。 CamelMongoDbCriteria ヘッダーが設定されている場合、その値がクエリーセレクター として使用され ます。CamelMongoDbCriteria ヘッダーが null の場合、IN メッセージボディーがクエリーセレクターとして使用されます。いずれの場合も、クエリーセレクターは Bson タイプであるか、Bson に変換できる必要があります(たとえば、JSON 文字列または HashMap)。詳細は、タイプ変換 を参照してください。

MongoDB ドライバーによって提供される フィルター を使用してクエリーセレクターを作成します。

35.7.1.3. クエリーセレクターのない例(コレクションの最初のドキュメントを返す)

from("direct:findOneByQuery")
    .to("mongodb:myDb?database=flights&collection=tickets&operation=findOneByQuery")
    .to("mock:resultFindOneByQuery");
from("direct:findOneByQuery")
    .setHeader(MongoDbConstants.CRITERIA, constant(Filters.eq("name", "Raul Kripalani")))
    .to("mongodb:myDb?database=flights&collection=tickets&operation=findOneByQuery")
    .to("mock:resultFindOneByQuery");
注記

オプションのパラメーター
をサポートします。この操作はプロジェクション演算子およびソート句をサポートします。Specifying a fields filter (projection) の Specifying a sort 句を参照してください。

35.7.1.5. findAll

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

35.7.1.5.1. クエリーセレクターのない例(コレクション内のすべてのドキュメントを返す)
from("direct:findAll")
    .to("mongodb:myDb?database=flights&collection=tickets&operation=findAll")
    .to("mock:resultFindAll");
from("direct:findAll")
    .setHeader(MongoDbConstants.CRITERIA, Filters.eq("name", "Raul Kripalani"))
    .to("mongodb:myDb?database=flights&collection=tickets&operation=findAll")
    .to("mock:resultFindAll");

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

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

CamelMongoDbAllowDiskUse

MongoDbConstants.ALLOW_DISK_USE

allowDiskUse MongoDB フラグを設定します。MongoDB Server 4.3.1 以降、これはサポートされます。古い MongoDB Server バージョンでこのヘッダーを使用すると、クエリーが失敗する可能性があります。

boolean/Boolean

35.7.1.5.3. outputType=MongoIterable オプションおよび batch size オプションを使用した例
from("direct:findAll")
    .setHeader(MongoDbConstants.BATCH_SIZE).constant(10)
    .setHeader(MongoDbConstants.CRITERIA, constant(Filters.eq("name", "Raul Kripalani")))
    .to("mongodb:myDb?database=flights&collection=tickets&operation=findAll&outputType=MongoIterable")
    .to("mock:resultFindAll");

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

Expand
ヘッダーのキークイック定数説明 (MongoDB API ドキュメントから抜粋)データのタイプ

CamelMongoDbResultTotalSize

MongoDbConstants.RESULT_TOTAL_SIZE

クエリーに一致するオブジェクトの数。これは、制限/スキップを考慮していません。

int/Integer

CamelMongoDbResultPageSize

MongoDbConstants.RESULT_PAGE_SIZE

クエリーに一致するオブジェクトの数。これは、制限/スキップを考慮していません。

int/Integer

注記

オプションのパラメーター
をサポートします。この操作はプロジェクション演算子およびソート句をサポートします。Specifying a fields filter (projection) の Specifying a sort 句を参照してください。

35.7.1.6. 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);

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

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

35.7.1.7. フィールドフィルターの指定 (プロジェクション)

クエリー操作は、デフォルトでは、(フィールドすべてとともに)一致するオブジェクトを完全に返します。ドキュメントのサイズが大きく、フィールドのサブセットのみを取得する必要がある場合は、CamelMongoDbFields .FIELDS_PROJECTION ヘッダーで関連する Bson (または JSON String や Map など)を Bson に変換するだけで、すべてのクエリー操作でフィールドフィルターを指定できます。

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

// route: from("direct:findAll").to("mongodb: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);

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

// route: from("direct:findAll").to("mongodb: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);

35.7.1.8. sort 句の指定

多くの場合、MongoDB の Sorts を使用して Bson の作成を簡素化する特定のフィールドによるソートに基づいて、最小/最大レコードを取得する必要があります。_id および boringField を除くすべてのフィールドを取得します。

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

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

Theme

© 2026 Red Hat
トップに戻る