Check out v4 of the Fauna CLI

v4 of the Fauna CLI is now in beta.

The new version introduces enhancements to the developer experience, including an improved authentication workflow. To get started, check out the CLI v4 quick start.

set.aggregate()

Aggregate all elements of a Set.

Signature

aggregate(seed: A, combiner: (A, A) => A) => A

Description

Aggregates all elements of the calling Set. There is no ordering expectation.

The calling Set isn’t changed.

Eager loading

This method uses eager loading and requires a read of each document in the calling Set. For large Sets, this may result in poor performance and high costs.

Performance hint: full_set_read

Queries that call this method on a document Set emit a performance hint, if enabled. For example, the following query:

// Use `aggregate()` to sum stock counts
let stockCounts = Product.all().map(doc => doc.stock )
stockCounts.aggregate(0, (a, b) => a + b)

Emits the following hint:

performance_hint: full_set_read - Using aggregate() causes the full set to be read. See https://docs.fauna.com/performance_hint/full_set_read.
at *query*:3:22
  |
3 | stockCounts.aggregate(0, (a, b) => a + b)
  |                      ^^^^^^^^^^^^^^^^^^^^
  |

To address the hint, use set.take() to explicitly limit the size of the calling Set to fewer than 100 documents:

// Limit the doc Set's size using `take()`
let stockCounts = Product.all().take(20).map(doc => doc.stock )
stockCounts.aggregate(0, (a, b) => a + b)

This applies even if the original, unbounded Set contains fewer than 100 documents.

Alternatively, you can rewrite the query to avoid calling the method.

Parameters

Parameter Type Required Description

seed

Number

Yes

Initial state value.

combiner

Function

Yes

Anonymous FQL function that aggregates the elements.

Combiner function parameters:

Parameter Type Required Description

accumulator

Generic

Value returned by the previous invocation.

current

Generic

Current Set value.

Return value

Type Description

Generic

Aggregate of the iterable. If the iterable is empty, the seed is returned.

Examples

// `toSet()` converts an Array to a Set.
let set = [1, 2, 3, 4].toSet()
set.aggregate(0, (a, b) => a + b)
10

Is this article helpful? 

Tell Fauna how the article can be improved:
Visit Fauna's forums or email docs@fauna.com

Thank you for your feedback!