set.reduce()
Description
Iterates through each element in a Set to perform a rolling operation.
For example, you can use reduce()
to calculate a rolling sum, concatenate
elements, or perform complex transformations.
reduce()
calls a reducer callback function on every element of the Set
from left to right. The reducer function takes two arguments:
-
The accumulator that holds the running result from previous iterations. The first element in the Set serves as the initial accumulator.
-
The current element’s value.
The method returns the result of the last iteration. 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.
Fold family methods
FQL supports several methods for folds, which iteratively reduce a Set to a single value. These methods include:
The methods are similar but have the following differences:
-
set.fold()
andset.foldRight()
accept an initial seed value and use it as the initial accumulator.set.reduce()
andset.reduceRight()
use the Set’s first element as the initial accumulator. -
set.fold()
andset.reduce()
iterate through the Set’s elements from left to right.set.foldRight()
andset.reduceRight()
iterate through the Set’s elements from right to left.
Parameters
Parameter | Type | Required | Description |
---|---|---|---|
reducer |
Yes |
Anonymous FQL function to call on each element in the Set. |
Examples
-
Starting with the following product prices:
// Gets a Set of the first nine `Product` collection // documents and projects the `price` field. Product.all().take(9) { price }
{ data: [ { price: 698 }, { price: 2499 }, { price: 499 }, { price: 399 }, { price: 35 }, { price: 349 }, { price: 299 }, { price: 149 }, { price: 2399 } ] }
-
Use
reduce()
to find the maximum price in the Set:Product.all().take(9).reduce((s, v) => { if (v.price > s.price) { v } else { s } }) {price}
{ price: 2499 }
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!