Filter

Filter( arrayOrSet, lambda )
Filter( arrayOrSet, lambda )
Filter( arrayOrSet, lambda )
Filter( arrayOrSet, lambda )
filter_( lambda, array_or_set )
Filter( arrayOrSet, lambda )

Description

The Filter function applies the lambda function to each member of arrayOrSet, which is an Array, Page, or Set. The return value matches the arrayOrSet type, and contains only those elements for which the lambda function returns true.

Providing a lambda function which does not return a Boolean results in an "invalid argument" error. If a Page is passed, its decorated fields are preserved in the result.

The run time of Filter is dependent on the size of the underlying set or page, and the exclusivity of the result. For large sets or pages with many non-exclusive items, executing Filter might result in a query timeout error.

To work around this, you may specify a larger query timeout via the driver that you are using.

Parameters

Argument Type Definition and Requirements

arrayOrSet

Array, Page, or Set

The group of items over which the lambda function iterates/operates.

lambda

The anonymous function to be executed, which must return a boolean.

Returns

Having the same type as arrayOrSet, the items for which the lambda function returned true.

Examples

The query below iterates over the array containing the values 1, 2, 3, executing the lambda function for each value. The lambda function returns true if the Modulo 2 of the value is 0, otherwise it returns false.

client.Query(
  Filter(Arr(1, 2, 3), i => EqualsFn(0, Modulo(i, 2))));
[ 2 ]
curl https://db.fauna.com/ \
    -u fnAChGwBcAACAO70ziE0cfROosNJHdgBmJU1PgpL: \
    -d '{
          "filter": {
            "lambda": "i",
            "expr": { "equals": [ 0, { "modulo": [ { "var": "i" }, 2 ] } ] }
          },
          "collection": [ 1, 2, 3 ]
        }'
HTTP/1.1 200 OK
{ "resource": [ 2 ] }
result, _ := client.Query(
    f.Filter(
        f.Arr{1, 2, 3},
        f.Lambda("i", f.Equals(0, f.Modulo(f.Var("i"), 2))),
    ),
)

fmt.Println(result)
[2]
System.out.println(
  client.query(
    Filter(
      Arr(Value(1), Value(2), Value(3)),
      Lambda(
            Value("i"),
            Equals(Value(0), Modulo(Var("i"), Value(2)))
      )
    )
  ).get());
[2]
client.query(
  q.Filter(
    [1, 2, 3],
    q.Lambda(
      'i',
      q.Equals(0, q.Modulo(q.Var('i'), 2)),
    ),
  )
)
.then((ret) => console.log(ret))
[ 2 ]
client.query(
  q.filter_(
    lambda i: q.equals(0, q.modulo(i, 2)),
    [1, 2, 3]
  ))
[ 2 ]
client.query(
  Filter(Arr(1, 2, 3), Lambda { i => Equals(0, Modulo(i, 2)) }))
[ 2 ]

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!