227.6.5. 其他操作

227.6.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 doc中提取)预期类型

CamelMongoDbBatchSize

MongoDbConstants.BATCH_SIZE

设置每个批处理要返回的文档数量。

int/Integer

CamelMongoDbAllowDiskUse

MongoDbConstants.ALLOW_DISK_USE

启用聚合管道阶段,将数据写入临时文件。

boolean/Boolean

通过 outputType=DBCursor 支持有效的检索。

您还可以通过包含 outputType=DBCursor (Camel 2.21+)作为 endpoint 选项,从服务器返回至您的路由的文档可能比设置上述标头更简单。这了来自 Mongo 驱动程序的 DBCursor,就像您在 Mongo shell 中执行 aggregate ()一样,允许您的路由迭代结果。默认情况下,如果不使用此选项,此组件会将驱动程序的光标中的文档加载到列表,并将此数据返回到您的路由 - 这可能导致大量内存对象。请记住,使用 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");