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");
from("direct:findById")
.to("mongodb3:myDb?database=flights&collection=tickets&operation=findById")
.to("mock:resultFindById");
オプションのパラメーター をサポートします。この操作は、フィールドフィルターの指定をサポートします。「 オプションのパラメーターの指定 」を参照してください。
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");
from("direct:findOneByQuery")
.to("mongodb3:myDb?database=flights&collection=tickets&operation=findOneByQuery")
.to("mock:resultFindOneByQuery");
クエリーを使用する例(一致する 1 つの結果を返す):
from("direct:findOneByQuery") .setHeader(MongoDbConstants.CRITERIA, Filters.eq("name", "Raul Kripalani")) .to("mongodb3:myDb?database=flights&collection=tickets&operation=findOneByQuery") .to("mock:resultFindOneByQuery");
from("direct:findOneByQuery")
.setHeader(MongoDbConstants.CRITERIA, Filters.eq("name", "Raul Kripalani"))
.to("mongodb3:myDb?database=flights&collection=tickets&operation=findOneByQuery")
.to("mock:resultFindOneByQuery");
オプションのパラメーター をサポートします。この操作は、フィールドの展開や 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");
from("direct:findAll")
.to("mongodb3:myDb?database=flights&collection=tickets&operation=findAll")
.to("mock:resultFindAll");
クエリーを使用する例(一致するすべての結果を返します)。
from("direct:findAll") .setHeader(MongoDbConstants.CRITERIA, Filters.eq("name", "Raul Kripalani")) .to("mongodb3:myDb?database=flights&collection=tickets&operation=findAll") .to("mock:resultFindAll");
from("direct:findAll")
.setHeader(MongoDbConstants.CRITERIA, Filters.eq("name", "Raul Kripalani"))
.to("mongodb3:myDb?database=flights&collection=tickets&operation=findAll")
.to("mock:resultFindAll");
ページングと効率的な取得は、以下のヘッダーでサポートされます。
ヘッダーキー | クイック定数 | 説明(MongoDB API ドキュメントから抽出) | 想定されるタイプ |
---|---|---|---|
|
| カーソルの先頭にある特定の数の要素を破棄します。 | int/Integer |
|
| 返される要素の数を制限します。 | int/Integer |
|
| 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");
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");
findAll
操作は、ページングを使用している場合に結果ページを繰り返し処理できるように、以下の OUT ヘッダーも返します。
ヘッダーキー | クイック定数 | 説明(MongoDB API ドキュメントから抽出) | データ型 |
---|---|---|---|
|
| クエリーに一致するオブジェクトの数。これには制限や省略は行われません。 | int/Integer |
|
| クエリーに一致するオブジェクトの数。これには制限や省略は行われません。 | 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);
// 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);
クエリー オブジェクトは CamelMongoDbCriteria
ヘッダーから抽出されるクエリー を指定できます。CamelMongoDbCriteria ヘッダーが null の場合、クエリーオブジェクトは抽出メッセージのボディーを抽出されます。つまり、タイプは Bson
か、Bson
に変換する必要があります。操作では、この基準に一致するドキュメントの量を返します。
Document query = ... Long count = template.requestBodyAndHeader("direct:count", query, MongoDbConstants.COLLECTION, "dynamicCollectionName");
Document query = ...
Long count = template.requestBodyAndHeader("direct:count", query, MongoDbConstants.COLLECTION, "dynamicCollectionName");
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);
// 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);
以下は、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);
// 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);
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);
// 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);
Camel ルートでは、SORT_BY ヘッダーを findOneByQuery 操作とともに使用して、同じ結果を得ることができます。FIELDS_PROJECTION ヘッダーも指定された場合、操作は別のコンポーネントに直接渡すことができる単一のフィールド/値のペアを返します(パラメーター化された MyBatis SELECT クエリーなど)。以下の例は、コレクションから一時的な最新ドキュメントを取得し、documentTimestamp
フィールドに基づいて結果を 1 つのフィールドに減らす方法を示しています。