Logical Functions Reference
Logical Functions
| Name | Description |
AND
|
Performs a logical AND |
OR
|
Performs a logical OR |
XOR
|
Performs a logical XOR |
NOT
|
Performs a logical NOT |
CONDITIONAL
|
Branches evaluation based on a conditional expression. |
EQUAL_ANY
|
Checks if a value is equal to any elements in an array |
NOT_EQUAL_ANY
|
Checks if a value is not equal to any elements in an array |
MAXIMUM
|
Returns the maximum value in a set of values |
MINIMUM
|
Returns the minimum value in a set of values |
AND
Syntax:
and(x: BOOLEAN...) -> BOOLEAN
Description:
Returns the logical AND of two or more boolean values.
Returns NULL
if the result can't be derived due to any of the given values being ABSENT
or NULL
.
Examples:
x
|
y
|
and(x, y)
|
|---|---|---|
TRUE
|
TRUE
|
TRUE
|
FALSE
|
TRUE
|
FALSE
|
NULL
|
TRUE
|
NULL
|
ABSENT
|
TRUE
|
NULL
|
NULL
|
FALSE
|
FALSE
|
FALSE
|
ABSENT
|
FALSE
|
Node.js
const result = await db . pipeline () . collection ( "books" ) . select ( and ( field ( "rating" ). greaterThan ( 4 ), field ( "price" ). lessThan ( 10 )) . as ( "under10Recommendation" ) ) . execute ();
Web
const result = await execute ( db . pipeline () . collection ( "books" ) . select ( and ( field ( "rating" ). greaterThan ( 4 ), field ( "price" ). lessThan ( 10 )) . as ( "under10Recommendation" ) ) );
Swift
let result = try await db . pipeline () . collection ( "books" ) . select ([ ( Field ( "rating" ). greaterThan ( 4 ) && Field ( "price" ). lessThan ( 10 )) . as ( "under10Recommendation" ) ]) . execute ()
Kotlin
Android
val result = db . pipeline () . collection ( "books" ) . select ( Expression . and ( field ( "rating" ). greaterThan ( 4 ), field ( "price" ). lessThan ( 10 )) . alias ( "under10Recommendation" ) ) . execute ()
Java
Android
Task<Pipeline . Snapshot > result = db . pipeline () . collection ( "books" ) . select ( Expression . and ( field ( "rating" ). greaterThan ( 4 ), field ( "price" ). lessThan ( 10 ) ). alias ( "under10Recommendation" ) ) . execute ();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field , And result = ( client . pipeline () . collection ( "books" ) . select ( And ( Field . of ( "rating" ) . greater_than ( 4 ), Field . of ( "price" ) . less_than ( 10 ) ) . as_ ( "under10Recommendation" ) ) . execute () )
Java
Pipeline . Snapshot result = firestore . pipeline () . collection ( "books" ) . select ( and ( greaterThan ( field ( "rating" ), 4 ), lessThan ( field ( "price" ), 10 )) . as ( "under10Recommendation" )) . execute () . get ();
OR
Syntax:
or(x: BOOLEAN...) -> BOOLEAN
Description:
Returns the logical OR of two or more boolean values.
Returns NULL
if the result can't be derived due to any of the given values being ABSENT
or NULL
.
Examples:
x
|
y
|
or(x, y)
|
|---|---|---|
TRUE
|
TRUE
|
TRUE
|
FALSE
|
TRUE
|
TRUE
|
NULL
|
TRUE
|
TRUE
|
ABSENT
|
TRUE
|
TRUE
|
NULL
|
FALSE
|
NULL
|
FALSE
|
ABSENT
|
NULL
|
Node.js
const result = await db . pipeline () . collection ( "books" ) . select ( or ( field ( "genre" ). equal ( "Fantasy" ), field ( "tags" ). arrayContains ( "adventure" )) . as ( "matchesSearchFilters" ) ) . execute ();
Web
const result = await execute ( db . pipeline () . collection ( "books" ) . select ( or ( field ( "genre" ). equal ( "Fantasy" ), field ( "tags" ). arrayContains ( "adventure" )) . as ( "matchesSearchFilters" ) ) );
Swift
let result = try await db . pipeline () . collection ( "books" ) . select ([ ( Field ( "genre" ). equal ( "Fantasy" ) || Field ( "tags" ). arrayContains ( "adventure" )) . as ( "matchesSearchFilters" ) ]) . execute ()
Kotlin
Android
val result = db . pipeline () . collection ( "books" ) . select ( Expression . or ( field ( "genre" ). equal ( "Fantasy" ), field ( "tags" ). arrayContains ( "adventure" )) . alias ( "matchesSearchFilters" ) ) . execute ()
Java
Android
Task<Pipeline . Snapshot > result = db . pipeline () . collection ( "books" ) . select ( Expression . or ( field ( "genre" ). equal ( "Fantasy" ), field ( "tags" ). arrayContains ( "adventure" ) ). alias ( "matchesSearchFilters" ) ) . execute ();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field , And , Or result = ( client . pipeline () . collection ( "books" ) . select ( Or ( Field . of ( "genre" ) . equal ( "Fantasy" ), Field . of ( "tags" ) . array_contains ( "adventure" ), ) . as_ ( "matchesSearchFilters" ) ) . execute () )
Java
Pipeline . Snapshot result = firestore . pipeline () . collection ( "books" ) . select ( or ( equal ( field ( "genre" ), "Fantasy" ), arrayContains ( field ( "tags" ), "adventure" )) . as ( "matchesSearchFilters" )) . execute () . get ();
XOR
Syntax:
xor(x: BOOLEAN...) -> BOOLEAN
Description:
Returns the logical XOR of two or more boolean values.
Returns NULL
if any of the given values are ABSENT
or NULL
.
Examples:
x
|
y
|
xor(x, y)
|
|---|---|---|
TRUE
|
TRUE
|
FALSE
|
FALSE
|
FALSE
|
FALSE
|
FALSE
|
TRUE
|
TRUE
|
NULL
|
TRUE
|
NULL
|
ABSENT
|
TRUE
|
NULL
|
NULL
|
FALSE
|
NULL
|
FALSE
|
ABSENT
|
NULL
|
Node.js
const result = await execute ( db . pipeline () . collection ( "books" ) . select ( xor ( field ( "tags" ). arrayContains ( "magic" ), field ( "tags" ). arrayContains ( "nonfiction" )) . as ( "matchesSearchFilters" ) ) );
Web
const result = await execute ( db . pipeline () . collection ( "books" ) . select ( xor ( field ( "tags" ). arrayContains ( "magic" ), field ( "tags" ). arrayContains ( "nonfiction" )) . as ( "matchesSearchFilters" ) ) );
Swift
let result = try await db . pipeline () . collection ( "books" ) . select ([ ( Field ( "tags" ). arrayContains ( "magic" ) ^ Field ( "tags" ). arrayContains ( "nonfiction" )) . as ( "matchesSearchFilters" ) ]) . execute ()
Kotlin
Android
val result = db . pipeline () . collection ( "books" ) . select ( Expression . xor ( field ( "tags" ). arrayContains ( "magic" ), field ( "tags" ). arrayContains ( "nonfiction" )) . alias ( "matchesSearchFilters" ) ) . execute ()
Java
Android
Task<Pipeline . Snapshot > result = db . pipeline () . collection ( "books" ) . select ( Expression . xor ( field ( "tags" ). arrayContains ( "magic" ), field ( "tags" ). arrayContains ( "nonfiction" ) ). alias ( "matchesSearchFilters" ) ) . execute ();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field , Xor result = ( client . pipeline () . collection ( "books" ) . select ( Xor ( [ Field . of ( "tags" ) . array_contains ( "magic" ), Field . of ( "tags" ) . array_contains ( "nonfiction" ), ] ) . as_ ( "matchesSearchFilters" ) ) . execute () )
Java
Pipeline . Snapshot result = firestore . pipeline () . collection ( "books" ) . select ( xor ( arrayContains ( field ( "tags" ), "magic" ), arrayContains ( field ( "tags" ), "nonfiction" )) . as ( "matchesSearchFilters" )) . execute () . get ();
NOT
Syntax:
not(x: BOOLEAN) -> BOOLEAN
Description:
Returns the logical NOT of a boolean value.
Node.js
const result = await execute ( db . pipeline () . collection ( "books" ) . select ( field ( "tags" ). arrayContains ( "nonfiction" ). not () . as ( "isFiction" ) ) );
Web
const result = await execute ( db . pipeline () . collection ( "books" ) . select ( field ( "tags" ). arrayContains ( "nonfiction" ). not () . as ( "isFiction" ) ) );
Swift
let result = try await db . pipeline () . collection ( "books" ) . select ([ ( ! Field ( "tags" ). arrayContains ( "nonfiction" )) . as ( "isFiction" ) ]) . execute ()
Kotlin
Android
val result = db . pipeline () . collection ( "books" ) . select ( Expression . not ( field ( "tags" ). arrayContains ( "nonfiction" ) ). alias ( "isFiction" ) ) . execute ()
Java
Android
Task<Pipeline . Snapshot > result = db . pipeline () . collection ( "books" ) . select ( Expression . not ( field ( "tags" ). arrayContains ( "nonfiction" ) ). alias ( "isFiction" ) ) . execute ();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field , Not result = ( client . pipeline () . collection ( "books" ) . select ( Not ( Field . of ( "tags" ) . array_contains ( "nonfiction" )) . as_ ( "isFiction" )) . execute () )
Java
Pipeline . Snapshot result = firestore . pipeline () . collection ( "books" ) . select ( not ( arrayContains ( field ( "tags" ), "nonfiction" )). as ( "isFiction" )) . execute () . get ();
CONDITIONAL
Syntax:
conditional(condition: BOOLEAN, true_case: ANY, false_case: ANY) -> ANY
Description:
Evaluates and returns the true_case
if the condition
evaluates to TRUE
.
Evaluates and returns the false_case
if the condition resolves to FALSE
, NULL
, or an ABSENT
value.
Examples:
condition
|
true_case
|
false_case
|
conditional(condition, true_case, false_case)
|
|---|---|---|---|
TRUE
|
1L | 0L | 1L |
FALSE
|
1L | 0L | 0L |
NULL
|
1L | 0L | 0L |
ABSENT
|
1L | 0L | 0L |
Node.js
const result = await execute ( db . pipeline () . collection ( "books" ) . select ( field ( "tags" ). arrayConcat ([ field ( "pages" ). greaterThan ( 100 ) . conditional ( constant ( "longRead" ), constant ( "shortRead" )) ]). as ( "extendedTags" ) ) );
Web
const result = await execute ( db . pipeline () . collection ( "books" ) . select ( field ( "tags" ). arrayConcat ([ field ( "pages" ). greaterThan ( 100 ) . conditional ( constant ( "longRead" ), constant ( "shortRead" )) ]). as ( "extendedTags" ) ) );
Swift
let result = try await db . pipeline () . collection ( "books" ) . select ([ Field ( "tags" ). arrayConcat ([ ConditionalExpression ( Field ( "pages" ). greaterThan ( 100 ), then : Constant ( "longRead" ), else : Constant ( "shortRead" ) ) ]). as ( "extendedTags" ) ]) . execute ()
Kotlin
Android
val result = db . pipeline () . collection ( "books" ) . select ( field ( "tags" ). arrayConcat ( Expression . conditional ( field ( "pages" ). greaterThan ( 100 ), constant ( "longRead" ), constant ( "shortRead" ) ) ). alias ( "extendedTags" ) ) . execute ()
Java
Android
Task<Pipeline . Snapshot > result = db . pipeline () . collection ( "books" ) . select ( field ( "tags" ). arrayConcat ( Expression . conditional ( field ( "pages" ). greaterThan ( 100 ), constant ( "longRead" ), constant ( "shortRead" ) ) ). alias ( "extendedTags" ) ) . execute ();
Python
from google.cloud.firestore_v1.pipeline_expressions import ( Field , Constant , Conditional , ) result = ( client . pipeline () . collection ( "books" ) . select ( Field . of ( "tags" ) . array_concat ( Conditional ( Field . of ( "pages" ) . greater_than ( 100 ), Constant . of ( "longRead" ), Constant . of ( "shortRead" ), ) ) . as_ ( "extendedTags" ) ) . execute () )
Java
Pipeline . Snapshot result = firestore . pipeline () . collection ( "books" ) . select ( arrayConcat ( field ( "tags" ), conditional ( greaterThan ( field ( "pages" ), 100 ), constant ( "longRead" ), constant ( "shortRead" ))) . as ( "extendedTags" )) . execute () . get ();
EQUAL_ANY
Syntax:
equal_any(value: ANY, search_space: ARRAY) -> BOOLEAN
Description:
Returns TRUE
if value
is in the search_space
array.
Examples:
value
|
search_space
|
equal_any(value, search_space)
|
|---|---|---|
|
0L
|
[1L, 2L, 3L] | FALSE
|
|
2L
|
[1L, 2L, 3L] | TRUE
|
NULL
|
[1L, 2L, 3L] | FALSE
|
NULL
|
[1L, NULL
] |
TRUE
|
ABSENT
|
[1L, NULL
] |
FALSE
|
|
NaN
|
[1L, NaN, 3L] | TRUE
|
Node.js
const result = await execute ( db . pipeline () . collection ( "books" ) . select ( field ( "genre" ). equalAny ([ "Science Fiction" , "Psychological Thriller" ]) . as ( "matchesGenreFilters" ) ) );
Web
const result = await execute ( db . pipeline () . collection ( "books" ) . select ( field ( "genre" ). equalAny ([ "Science Fiction" , "Psychological Thriller" ]) . as ( "matchesGenreFilters" ) ) );
Swift
let result = try await db . pipeline () . collection ( "books" ) . select ([ Field ( "genre" ). equalAny ([ "Science Fiction" , "Psychological Thriller" ]) . as ( "matchesGenreFilters" ) ]) . execute ()
Kotlin
Android
val result = db . pipeline () . collection ( "books" ) . select ( field ( "genre" ). equalAny ( listOf ( "Science Fiction" , "Psychological Thriller" )) . alias ( "matchesGenreFilters" ) ) . execute ()
Java
Android
Task<Pipeline . Snapshot > result = db . pipeline () . collection ( "books" ) . select ( field ( "genre" ). equalAny ( Arrays . asList ( "Science Fiction" , "Psychological Thriller" )) . alias ( "matchesGenreFilters" ) ) . execute ();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client . pipeline () . collection ( "books" ) . select ( Field . of ( "genre" ) . equal_any ([ "Science Fiction" , "Psychological Thriller" ]) . as_ ( "matchesGenreFilters" ) ) . execute () )
Java
Pipeline . Snapshot result = firestore . pipeline () . collection ( "books" ) . select ( equalAny ( field ( "genre" ), Arrays . asList ( "Science Fiction" , "Psychological Thriller" )) . as ( "matchesGenreFilters" )) . execute () . get ();
NOT_EQUAL_ANY
Syntax:
not_equal_any(value: ANY, search_space: ARRAY) -> BOOLEAN
Description:
Returns TRUE
if value
is not in the search_space
array.
Examples:
value
|
search_space
|
not_equal_any(value, search_space)
|
|---|---|---|
|
0L
|
[1L, 2L, 3L] | TRUE
|
|
2L
|
[1L, 2L, 3L] | FALSE
|
NULL
|
[1L, 2L, 3L] | TRUE
|
NULL
|
[1L, NULL
] |
FALSE
|
ABSENT
|
[1L, NULL
] |
TRUE
|
|
NaN
|
[1L, NaN, 3L] | FALSE
|
Node.js
const result = await execute ( db . pipeline () . collection ( "books" ) . select ( field ( "author" ). notEqualAny ([ "George Orwell" , "F. Scott Fitzgerald" ]) . as ( "byExcludedAuthors" ) ) );
Web
const result = await execute ( db . pipeline () . collection ( "books" ) . select ( field ( "author" ). notEqualAny ([ "George Orwell" , "F. Scott Fitzgerald" ]) . as ( "byExcludedAuthors" ) ) );
Swift
let result = try await db . pipeline () . collection ( "books" ) . select ([ Field ( "author" ). notEqualAny ([ "George Orwell" , "F. Scott Fitzgerald" ]) . as ( "byExcludedAuthors" ) ]) . execute ()
Kotlin
Android
val result = db . pipeline () . collection ( "books" ) . select ( field ( "author" ). notEqualAny ( listOf ( "George Orwell" , "F. Scott Fitzgerald" )) . alias ( "byExcludedAuthors" ) ) . execute ()
Java
Android
Task<Pipeline . Snapshot > result = db . pipeline () . collection ( "books" ) . select ( field ( "author" ). notEqualAny ( Arrays . asList ( "George Orwell" , "F. Scott Fitzgerald" )) . alias ( "byExcludedAuthors" ) ) . execute ();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client . pipeline () . collection ( "books" ) . select ( Field . of ( "author" ) . not_equal_any ([ "George Orwell" , "F. Scott Fitzgerald" ]) . as_ ( "byExcludedAuthors" ) ) . execute () )
Java
Pipeline . Snapshot result = firestore . pipeline () . collection ( "books" ) . select ( notEqualAny ( field ( "author" ), Arrays . asList ( "George Orwell" , "F. Scott Fitzgerald" )) . as ( "byExcludedAuthors" )) . execute () . get ();
MAXIMUM
Syntax:
maximum(x: ANY...) -> ANY
maximum(x: ARRAY) -> ANY
Description:
Returns the maximum non- NULL
, non- ABSENT
value in a series of values x
.
If there are no non- NULL
, non- ABSENT
values, NULL
is returned.
If there are multiple maximum equivalent values, any one of those values can be returned. Value type ordering follows documented ordering .
Examples:
x
|
y
|
maximum(x, y)
|
|---|---|---|
FALSE
|
TRUE
|
TRUE
|
FALSE
|
-10L | -10L |
|
0.0
|
-5L | 0.0 |
|
"foo"
|
"bar" | "foo" |
|
"foo"
|
["foo"] | ["foo"] |
ABSENT
|
ABSENT
|
NULL
|
NULL
|
NULL
|
NULL
|
Node.js
const result = await execute ( db . pipeline () . collection ( "books" ) . aggregate ( field ( "price" ). maximum (). as ( "maximumPrice" )) );
Web
const result = await execute ( db . pipeline () . collection ( "books" ) . aggregate ( field ( "price" ). maximum (). as ( "maximumPrice" )) );
Swift
let result = try await db . pipeline () . collection ( "books" ) . select ([ Field ( "rating" ). logicalMaximum ([ 1 ]). as ( "flooredRating" ) ]) . execute ()
Kotlin
Android
val result = db . pipeline () . collection ( "books" ) . select ( field ( "rating" ). logicalMaximum ( 1 ). alias ( "flooredRating" ) ) . execute ()
Java
Android
Task<Pipeline . Snapshot > result = db . pipeline () . collection ( "books" ) . select ( field ( "rating" ). logicalMaximum ( 1 ). alias ( "flooredRating" ) ) . execute ();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client . pipeline () . collection ( "books" ) . select ( Field . of ( "rating" ) . logical_maximum ( 1 ) . as_ ( "flooredRating" )) . execute () )
Java
Pipeline . Snapshot result = firestore . pipeline () . collection ( "books" ) . select ( logicalMaximum ( field ( "rating" ), 1 ). as ( "flooredRating" )) . execute () . get ();
MINIMUM
Syntax:
minimum(x: ANY...) -> ANY
minimum(x: ARRAY) -> ANY
Description:
Returns the minimum non- NULL
, non- ABSENT
value in a series of values x
.
If there are no non- NULL
, non- ABSENT
values, NULL
is returned.
If there are multiple minimum equivalent values, any one of those values can be returned. Value type ordering follows documented ordering .
Examples:
x
|
y
|
minimum(x, y)
|
|---|---|---|
FALSE
|
TRUE
|
FALSE
|
FALSE
|
-10L | FALSE
|
|
0.0
|
-5L | -5L |
|
"foo"
|
"bar" | "bar" |
|
"foo"
|
["foo"] | "foo" |
ABSENT
|
ABSENT
|
NULL
|
NULL
|
NULL
|
NULL
|
Node.js
const result = await execute ( db . pipeline () . collection ( "books" ) . aggregate ( field ( "price" ). minimum (). as ( "minimumPrice" )) );
Web
const result = await execute ( db . pipeline () . collection ( "books" ) . aggregate ( field ( "price" ). minimum (). as ( "minimumPrice" )) );
Swift
let result = try await db . pipeline () . collection ( "books" ) . select ([ Field ( "rating" ). logicalMinimum ([ 5 ]). as ( "cappedRating" ) ]) . execute ()
Kotlin
Android
val result = db . pipeline () . collection ( "books" ) . select ( field ( "rating" ). logicalMinimum ( 5 ). alias ( "cappedRating" ) ) . execute ()
Java
Android
Task<Pipeline . Snapshot > result = db . pipeline () . collection ( "books" ) . select ( field ( "rating" ). logicalMinimum ( 5 ). alias ( "cappedRating" ) ) . execute ();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client . pipeline () . collection ( "books" ) . select ( Field . of ( "rating" ) . logical_minimum ( 5 ) . as_ ( "cappedRating" )) . execute () )
Java
Pipeline . Snapshot result = firestore . pipeline () . collection ( "books" ) . select ( logicalMinimum ( field ( "rating" ), 5 ). as ( "cappedRating" )) . execute () . get ();
What's next
- See the Pipeline Queries overview

