216.5.5. その他の操作
216.5.5.1. aggregate
Camel 2.14 から利用可能
指定されたパイプラインがボディーに含まれる状態で集約を実行します。集約には長い操作があり、大きな操作となる可能性があります。注意して使用してください。
// route: from("direct:aggregate").to("mongodb:myDb?database=science&collection=notableScientists&operation=aggregate"); from("direct:aggregate") .setBody().constant("[{ $match : {$or : [{\"scientist\" : \"Darwin\"},{\"scientist\" : \"Einstein\"}]}},{ $group: { _id: \"$scientist\", count: { $sum: 1 }} } ]") .to("mongodb:myDb?database=science&collection=notableScientists&operation=aggregate") .to("mock:resultAggregate");
以下の IN メッセージヘッダーをサポートします。
ヘッダーキー | クイック定数 | 説明(MongoDB API ドキュメントから抽出) | 想定されるタイプ |
---|---|---|---|
|
| バッチごとに返すドキュメントの数を設定します。 | int/Integer |
|
| 集約パイプラインのステージを有効にして、データを一時ファイルに書き込みます。 | boolean/Boolean |
効率的な取得は、outputType=DBCursor でサポートされています。
また、上記のヘッダーを設定するよりも簡単なエンドポイントオプションとして outputType=DBCursor(Camel 2.21+)を含めることで、サーバーからルートへ返されたドキュメントを「ストリーム」することもできます。これにより、Mongo シェルで aggregate()を実行しているのと同じく、Mongo ドライバーから DBCursor が操作し、ルートが結果を繰り返し処理できるようになります。デフォルトでは、このオプションがないと、このコンポーネントはドライバーのカーソルから List にドキュメントを読み込んで、ルートに戻ります。これにより、多数のインメモリーオブジェクトが発生する可能性があります。DBCursor を使用すると、一致するドキュメントの数が尋ねられない点に注意してください。詳細は、MongoDB のドキュメントサイトを参照してください。
outputType=DBCursor および batch サイズのあるオプションの例:
// route: from("direct:aggregate").to("mongodb:myDb?database=science&collection=notableScientists&operation=aggregate"); from("direct:aggregate") .setHeader(MongoDbConstants.BATCH_SIZE).constant(10) .setBody().constant("[{ $match : {$or : [{\"scientist\" : \"Darwin\"},{\"scientist\" : \"Einstein\"}]}},{ $group: { _id: \"$scientist\", count: { $sum: 1 }} } ]") .to("mongodb:myDb?database=science&collection=notableScientists&operation=aggregate&outputType=DBCursor") .to("mock:resultAggregate");