Aggregator
An aggregator is a type of module designed to merge several bundles of data into a single bundle.
When an aggregator is executed, it:
accumulates all the bundles it receives (during a single source module's operation)
outputs a single bundle with an array containing one item per each accumulated bundle. The content of the array's items depends on particular aggregator module and its setup.
A typical example of an aggregator module is the Array aggregator module. Aggregators usually feature the following fields:
Source Module | The module from which the bundle aggregation will start. The source module is usually an iterator or a search module that outputs a series of bundles. Once you setup the aggregator's Source Module (and close the aggregator's setup), the route between the source module and the aggregator will be wrapped in a grey area to visualize the start and the end of the aggregation. |
Group by | The aggregator's output can be split into several groups with the help of the Group by field. The Group by field can contain a formula that is evaluated for each aggregator's input bundle. The aggregator then outputs one bundle per each distinct formula's value. Each bundle contains two items:
|
Stop processing after an empty aggregation | By default, the aggregator outputs the result of the aggregation even in case no bundles reached the aggregator (e.g. because they have been all filtered out on their way). If the Stop processing after an empty aggregation option is enabled, the aggregator will not produce any output bundle in this case and the flow will stop. |
Note
Bundles outputted from the source module and any other modules between the source module and the aggregator module are not outputted by the aggregator and thus items in these bundles are not accessible by the modules in the flow after the aggregator.
If you need to access items from bundles outputted from the source module and any other modules between the source module and the aggregator module, make sure to include them in the aggregator's setup, e.g. in the Aggregated fields field in the setup of the Array aggregator module.
Example
Use case: Zipping all email attachments and uploading the ZIP file to Dropbox
The scenario below shows how to:
Watch a mailbox for incoming emails: Email > Watch emails trigger will output a bundle with item
Attachments[]
, which is an array containing all the email's attachments.Iterate the email's attachments: Email > Iterate attachments iterator takes the items from the
Attachments[]
array one by one and sends them further as separate bundles.Aggregate the bundles outputted by the Email > Iterate attachments module: Archive > Create an archive aggregator accumulates all the bundles it receives and outputs a single bundle containing the ZIP file
Upload the resulting ZIP file to Dropbox: Dropbox > Upload a file obtains the ZIP file from the Archive > Create an archive module and uploads it to Dropbox.
Below is a sample setup of the Archive > Create an archive aggregator: