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