Arithmetic Functions
All arithmetic functions in Cloud Firestore with MongoDB compatibility have the following behaviors:
- Evaluates to
NULLif any of the input parameters isNULL. - Evaluates to
NaNif any of the arguments isNaN. - Generates an error if an overflow or underflow occurs.
Additionally, when an arithmetic function takes multiple numeric arguments of
different types (for example: add(5.0, 6)
), Cloud Firestore with MongoDB compatibility implicitly
converts arguments to the widest input type. If only INT32
inputs are provided, the return type will be INT64
.
| Name | Description |
ABS
|
Returns the absolute value of a number
|
ADD
|
Returns the value of x + y
|
SUBTRACT
|
Returns the value of x - y
|
MULTIPLY
|
Returns the value of x * y
|
DIVIDE
|
Returns the value of x / y
|
MOD
|
Returns the remainder of the division of x / y
|
CEIL
|
Returns the ceiling of a number
|
FLOOR
|
Returns the floor of a number
|
ROUND
|
Rounds a number
to places
decimal places |
POW
|
Returns the value of base^exponent
|
SQRT
|
Returns the square root of a number
|
EXP
|
Returns Euler's number raised to the power of exponent
|
LN
|
Returns the natural logarithm of a number
|
LOG
|
Returns the logarithm of a number
|
LOG10
|
Returns the logarithm of a number
to base 10
|
RAND
|
Returns a pseudo-random floating point number |
ABS
Syntax:
abs[N <: INT32 | INT64 | FLOAT64](number: N) -> N
Description:
Returns the absolute value of a number
.
- Throws an error when the function would overflow an
INT32orINT64value.
Examples:
| number | abs(number)
|
|---|---|
| 10 | 10 |
| -10 | 10 |
| 10L | 10L |
| -0.0 | 0.0 |
| 10.5 | 10.5 |
| -10.5 | 10.5 |
| -2 31 | [error]
|
| -2 63 | [error]
|
ADD
Syntax:
add[N <: INT32 | INT64 | FLOAT64](x: N, y: N) -> N
Description:
Returns the value of x + y
.
Examples:
| x | y | add(x, y)
|
|---|---|---|
|
20
|
3 | 23 |
|
10.0
|
1 | 11.0 |
|
22.5
|
2.0 | 24.5 |
|
INT64.MAX
|
1 | [error]
|
|
INT64.MIN
|
-1 | [error]
|
Node.js
const result = await db . pipeline () . collection ( "books" ) . select ( field ( "soldBooks" ). add ( field ( "unsoldBooks" )). as ( "totalBooks" )) . execute ();
Web
const result = await execute ( db . pipeline () . collection ( "books" ) . select ( field ( "soldBooks" ). add ( field ( "unsoldBooks" )). as ( "totalBooks" )) );
Swift
let result = try await db . pipeline () . collection ( "books" ) . select ([ Field ( "soldBooks" ). add ( Field ( "unsoldBooks" )). as ( "totalBooks" )]) . execute ()
Kotlin
val result = db . pipeline () . collection ( "books" ) . select ( Expression . add ( field ( "soldBooks" ), field ( "unsoldBooks" )). alias ( "totalBooks" )) . execute ()
Java
Task<Pipeline . Snapshot > result = db . pipeline () . collection ( "books" ) . select ( Expression . add ( field ( "soldBooks" ), field ( "unsoldBooks" )). alias ( "totalBooks" )) . execute ();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client . pipeline () . collection ( "books" ) . select ( Field . of ( "soldBooks" ) . add ( Field . of ( "unsoldBooks" )) . as_ ( "totalBooks" )) . execute () )
Java
Pipeline . Snapshot result = firestore . pipeline () . collection ( "books" ) . select ( add ( field ( "soldBooks" ), field ( "unsoldBooks" )). as ( "totalBooks" )) . execute () . get ();
SUBTRACT
Syntax:
subtract[N <: INT32 | INT64 | FLOAT64](x: N, y: N) -> N
Description:
Returns the value of x - y
.
Examples:
| x | y | subtract(x, y)
|
|---|---|---|
|
20
|
3 | 17 |
|
10.0
|
1 | 9.0 |
|
22.5
|
2.0 | 20.5 |
|
INT64.MAX
|
-1 | [error]
|
|
INT64.MIN
|
1 | [error]
|
Node.js
const storeCredit = 7 ; const result = await db . pipeline () . collection ( "books" ) . select ( field ( "price" ). subtract ( constant ( storeCredit )). as ( "totalCost" )) . execute ();
Web
const storeCredit = 7 ; const result = await execute ( db . pipeline () . collection ( "books" ) . select ( field ( "price" ). subtract ( constant ( storeCredit )). as ( "totalCost" )) );
Swift
let storeCredit = 7 let result = try await db . pipeline () . collection ( "books" ) . select ([ Field ( "price" ). subtract ( Constant ( storeCredit )). as ( "totalCost" )]) . execute ()
Kotlin
val storeCredit = 7 val result = db . pipeline () . collection ( "books" ) . select ( Expression . subtract ( field ( "price" ), storeCredit ). alias ( "totalCost" )) . execute ()
Java
int storeCredit = 7 ; Task<Pipeline . Snapshot > result = db . pipeline () . collection ( "books" ) . select ( Expression . subtract ( field ( "price" ), storeCredit ). alias ( "totalCost" )) . execute ();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field store_credit = 7 result = ( client . pipeline () . collection ( "books" ) . select ( Field . of ( "price" ) . subtract ( store_credit ) . as_ ( "totalCost" )) . execute () )
Java
int storeCredit = 7 ; Pipeline . Snapshot result = firestore . pipeline () . collection ( "books" ) . select ( subtract ( field ( "price" ), storeCredit ). as ( "totalCost" )) . execute () . get ();
MULTIPLY
Syntax:
multiply[N <: INT32 | INT64 | FLOAT64](x: N, y: N) -> N
Description:
Returns the value of x * y
.
Examples:
| x | y | multiply(x, y)
|
|---|---|---|
|
20
|
3 | 60 |
|
10.0
|
1 | 10.0 |
|
22.5
|
2.0 | 45.0 |
|
INT64.MAX
|
2 | [error]
|
|
INT64.MIN
|
2 | [error]
|
|
FLOAT64.MAX
|
FLOAT64.MAX | +inf
|
Node.js
const result = await db . pipeline () . collection ( "books" ) . select ( field ( "price" ). multiply ( field ( "soldBooks" )). as ( "revenue" )) . execute ();
Web
const result = await execute ( db . pipeline () . collection ( "books" ) . select ( field ( "price" ). multiply ( field ( "soldBooks" )). as ( "revenue" )) );
Swift
let result = try await db . pipeline () . collection ( "books" ) . select ([ Field ( "price" ). multiply ( Field ( "soldBooks" )). as ( "revenue" )]) . execute ()
Kotlin
val result = db . pipeline () . collection ( "books" ) . select ( Expression . multiply ( field ( "price" ), field ( "soldBooks" )). alias ( "revenue" )) . execute ()
Java
Task<Pipeline . Snapshot > result = db . pipeline () . collection ( "books" ) . select ( Expression . multiply ( field ( "price" ), field ( "soldBooks" )). alias ( "revenue" )) . execute ();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client . pipeline () . collection ( "books" ) . select ( Field . of ( "price" ) . multiply ( Field . of ( "soldBooks" )) . as_ ( "revenue" )) . execute () )
Java
Pipeline . Snapshot result = firestore . pipeline () . collection ( "books" ) . select ( multiply ( field ( "price" ), field ( "soldBooks" )). as ( "revenue" )) . execute () . get ();
DIVIDE
Syntax:
divide[N <: INT32 | INT64 | FLOAT64](x: N, y: N) -> N
Description:
Returns the value of x / y
. Integer division is truncated.
Examples:
| x | y | divide(x, y)
|
|---|---|---|
|
20
|
3 | 6 |
|
10.0
|
3 | 3.333... |
|
22.5
|
2 | 11.25 |
|
10
|
0 | [error]
|
|
1.0
|
0.0 | +inf
|
|
-1.0
|
0.0 | -inf
|
Node.js
const result = await db . pipeline () . collection ( "books" ) . select ( field ( "ratings" ). divide ( field ( "soldBooks" )). as ( "reviewRate" )) . execute ();
Web
const result = await execute ( db . pipeline () . collection ( "books" ) . select ( field ( "ratings" ). divide ( field ( "soldBooks" )). as ( "reviewRate" )) );
Swift
let result = try await db . pipeline () . collection ( "books" ) . select ([ Field ( "ratings" ). divide ( Field ( "soldBooks" )). as ( "reviewRate" )]) . execute ()
Kotlin
val result = db . pipeline () . collection ( "books" ) . select ( Expression . divide ( field ( "ratings" ), field ( "soldBooks" )). alias ( "reviewRate" )) . execute ()
Java
Task<Pipeline . Snapshot > result = db . pipeline () . collection ( "books" ) . select ( Expression . divide ( field ( "ratings" ), field ( "soldBooks" )). alias ( "reviewRate" )) . execute ();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client . pipeline () . collection ( "books" ) . select ( Field . of ( "ratings" ) . divide ( Field . of ( "soldBooks" )) . as_ ( "reviewRate" )) . execute () )
Java
Pipeline . Snapshot result = firestore . pipeline () . collection ( "books" ) . select ( divide ( field ( "ratings" ), field ( "soldBooks" )). as ( "reviewRate" )) . execute () . get ();
MOD
Syntax:
mod[N <: INT32 | INT64 | FLOAT64](x: N, y: N) -> N
Description:
Returns the remainder of x / y
.
- Throws an
errorwhenyis zero for integer types (INT64). - Returns
NaNwhenyis zero for float types (FLOAT64).
Examples:
| x | y | mod(x, y)
|
|---|---|---|
|
20
|
3 | 2 |
|
-10
|
3 | -1 |
|
10
|
-3 | 1 |
|
-10
|
-3 | -1 |
|
10
|
1 | 0 |
|
22.5
|
2 | 0.5 |
|
22.5
|
0.0 | NaN
|
|
25
|
0 | [error]
|
Node.js
const displayCapacity = 1000 ; const result = await db . pipeline () . collection ( "books" ) . select ( field ( "unsoldBooks" ). mod ( constant ( displayCapacity )). as ( "warehousedBooks" )) . execute ();
Web
const displayCapacity = 1000 ; const result = await execute ( db . pipeline () . collection ( "books" ) . select ( field ( "unsoldBooks" ). mod ( constant ( displayCapacity )). as ( "warehousedBooks" )) );
Swift
let displayCapacity = 1000 let result = try await db . pipeline () . collection ( "books" ) . select ([ Field ( "unsoldBooks" ). mod ( Constant ( displayCapacity )). as ( "warehousedBooks" )]) . execute ()
Kotlin
val displayCapacity = 1000 val result = db . pipeline () . collection ( "books" ) . select ( Expression . mod ( field ( "unsoldBooks" ), displayCapacity ). alias ( "warehousedBooks" )) . execute ()
Java
int displayCapacity = 1000 ; Task<Pipeline . Snapshot > result = db . pipeline () . collection ( "books" ) . select ( Expression . mod ( field ( "unsoldBooks" ), displayCapacity ). alias ( "warehousedBooks" )) . execute ();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field display_capacity = 1000 result = ( client . pipeline () . collection ( "books" ) . select ( Field . of ( "unsoldBooks" ) . mod ( display_capacity ) . as_ ( "warehousedBooks" )) . execute () )
Java
int displayCapacity = 1000 ; Pipeline . Snapshot result = firestore . pipeline () . collection ( "books" ) . select ( mod ( field ( "unsoldBooks" ), displayCapacity ). as ( "warehousedBooks" )) . execute () . get ();
CEIL
Syntax:
ceil[N <: INT32 | INT64 | FLOAT64](number: N) -> N
Description:
Returns the smallest integer value that isn't less than number
.
Examples:
| number | ceil(number)
|
|---|---|
| 20 | 20 |
| 10 | 10 |
| 0 | 0 |
| 24L | 24L |
| -0.4 | -0.0 |
| 0.4 | 1.0 |
| 22.5 | 23.0 |
+inf
|
+inf
|
-inf
|
-inf
|
Node.js
const booksPerShelf = 100 ; const result = await db . pipeline () . collection ( "books" ) . select ( field ( "unsoldBooks" ). divide ( constant ( booksPerShelf )). ceil (). as ( "requiredShelves" ) ) . execute ();
Web
const booksPerShelf = 100 ; const result = await execute ( db . pipeline () . collection ( "books" ) . select ( field ( "unsoldBooks" ). divide ( constant ( booksPerShelf )). ceil (). as ( "requiredShelves" ) ) );
Swift
let booksPerShelf = 100 let result = try await db . pipeline () . collection ( "books" ) . select ([ Field ( "unsoldBooks" ). divide ( Constant ( booksPerShelf )). ceil (). as ( "requiredShelves" ) ]) . execute ()
Kotlin
val booksPerShelf = 100 val result = db . pipeline () . collection ( "books" ) . select ( Expression . divide ( field ( "unsoldBooks" ), booksPerShelf ). ceil (). alias ( "requiredShelves" ) ) . execute ()
Java
int booksPerShelf = 100 ; Task<Pipeline . Snapshot > result = db . pipeline () . collection ( "books" ) . select ( Expression . divide ( field ( "unsoldBooks" ), booksPerShelf ). ceil (). alias ( "requiredShelves" ) ) . execute ();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field books_per_shelf = 100 result = ( client . pipeline () . collection ( "books" ) . select ( Field . of ( "unsoldBooks" ) . divide ( books_per_shelf ) . ceil () . as_ ( "requiredShelves" ) ) . execute () )
Java
int booksPerShelf = 100 ; Pipeline . Snapshot result = firestore . pipeline () . collection ( "books" ) . select ( ceil ( divide ( field ( "unsoldBooks" ), booksPerShelf )). as ( "requiredShelves" )) . execute () . get ();
FLOOR
Syntax:
floor[N <: INT32 | INT64 | FLOAT64](number: N) -> N
Description:
Returns the largest integer value that isn't greater than number
.
Examples:
| number | floor(number)
|
|---|---|
| 20 | 20 |
| 10 | 10 |
| 0 | 0 |
| 2147483648 | 2147483648 |
| -0.4 | -1.0 |
| 0.4 | 0.0 |
| 22.5 | 22.0 |
+inf
|
+inf
|
-inf
|
-inf
|
Node.js
const result = await db . pipeline () . collection ( "books" ) . addFields ( field ( "wordCount" ). divide ( field ( "pages" )). floor (). as ( "wordsPerPage" ) ) . execute ();
Web
const result = await execute ( db . pipeline () . collection ( "books" ) . addFields ( field ( "wordCount" ). divide ( field ( "pages" )). floor (). as ( "wordsPerPage" ) ) );
Swift
let result = try await db . pipeline () . collection ( "books" ) . addFields ([ Field ( "wordCount" ). divide ( Field ( "pages" )). floor (). as ( "wordsPerPage" ) ]) . execute ()
Kotlin
val result = db . pipeline () . collection ( "books" ) . addFields ( Expression . divide ( field ( "wordCount" ), field ( "pages" )). floor (). alias ( "wordsPerPage" ) ) . execute ()
Java
Task<Pipeline . Snapshot > result = db . pipeline () . collection ( "books" ) . addFields ( Expression . divide ( field ( "wordCount" ), field ( "pages" )). floor (). alias ( "wordsPerPage" ) ) . execute ();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client . pipeline () . collection ( "books" ) . add_fields ( Field . of ( "wordCount" ) . divide ( Field . of ( "pages" )) . floor () . as_ ( "wordsPerPage" ) ) . execute () )
Java
Pipeline . Snapshot result = firestore . pipeline () . collection ( "books" ) . addFields ( floor ( divide ( field ( "wordCount" ), field ( "pages" ))). as ( "wordsPerPage" )) . execute () . get ();
ROUND
Syntax:
round[N <: INT32 | INT64 | FLOAT64 | DECIMAL128](number: N) -> N
round[N <: INT32 | INT64 | FLOAT64 | DECIMAL128](number: N, places: INT64) -> N
Description:
Rounds places
digits off a number
. Rounds digits from the right of the decimal point if places
is positive, and to the left of the decimal point if it is negative.
- If only
numberis provided, rounds to the nearest whole value. - Rounds away from zero in halfway cases.
- An
erroris thrown if rounding with a negativeplacesvalue results in overflow.
Examples:
| number | places | round(number, places)
|
|---|---|---|
|
15.5
|
0 | 16.0 |
|
-15.5
|
0 | -16.0 |
|
15
|
1 | 15 |
|
15
|
0 | 15 |
|
15
|
-1 | 20 |
|
15
|
-2 | 0 |
|
15.48924
|
1 | 15.5 |
|
2 31
-1
|
-1 | [error]
|
|
2 63
-1L
|
-1 | [error]
|
Node.js
const result = await db . pipeline () . collection ( "books" ) . select ( field ( "soldBooks" ). multiply ( field ( "price" )). round (). as ( "partialRevenue" )) . aggregate ( field ( "partialRevenue" ). sum (). as ( "totalRevenue" )) . execute ();
Web
const result = await execute ( db . pipeline () . collection ( "books" ) . select ( field ( "soldBooks" ). multiply ( field ( "price" )). round (). as ( "partialRevenue" )) . aggregate ( field ( "partialRevenue" ). sum (). as ( "totalRevenue" )) );
Swift
let result = try await db . pipeline () . collection ( "books" ) . select ([ Field ( "soldBooks" ). multiply ( Field ( "price" )). round (). as ( "partialRevenue" )]) . aggregate ([ Field ( "partialRevenue" ). sum (). as ( "totalRevenue" )]) . execute ()
Kotlin
val result = db . pipeline () . collection ( "books" ) . select ( Expression . multiply ( field ( "soldBooks" ), field ( "price" )). round (). alias ( "partialRevenue" )) . aggregate ( AggregateFunction . sum ( "partialRevenue" ). alias ( "totalRevenue" )) . execute ()
Java
Task<Pipeline . Snapshot > result = db . pipeline () . collection ( "books" ) . select ( Expression . multiply ( field ( "soldBooks" ), field ( "price" )). round (). alias ( "partialRevenue" )) . aggregate ( AggregateFunction . sum ( "partialRevenue" ). alias ( "totalRevenue" )) . execute ();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client . pipeline () . collection ( "books" ) . select ( Field . of ( "soldBooks" ) . multiply ( Field . of ( "price" )) . round () . as_ ( "partialRevenue" ) ) . aggregate ( Field . of ( "partialRevenue" ) . sum () . as_ ( "totalRevenue" )) . execute () )
Java
Pipeline . Snapshot result = firestore . pipeline () . collection ( "books" ) . select ( round ( multiply ( field ( "soldBooks" ), field ( "price" ))). as ( "partialRevenue" )) . aggregate ( sum ( "partialRevenue" ). as ( "totalRevenue" )) . execute () . get ();
POW
Syntax:
pow(base: FLOAT64, exponent: FLOAT64) -> FLOAT64
Description:
Returns the value base
raised to the power of exponent
.
-
Throws an error if
base <= 0andexponentis negative. -
For any
exponent,pow(1, exponent)is 1. -
For any
base,pow(base, 0)is 1.
Examples:
| base | exponent | pow(base, exponent)
|
|---|---|---|
|
2
|
3 | 8.0 |
|
2
|
-3 | 0.125 |
+inf
|
0 | 1.0 |
|
1
|
+inf
|
1.0 |
|
-1
|
0.5 | [error]
|
|
0
|
-1 | [error]
|
Node.js
const googleplex = { latitude : 37.4221 , longitude : 122.0853 }; const result = await db . pipeline () . collection ( "cities" ) . addFields ( field ( "lat" ). subtract ( constant ( googleplex . latitude )) . multiply ( 111 /* km per degree */ ) . pow ( 2 ) . as ( "latitudeDifference" ), field ( "lng" ). subtract ( constant ( googleplex . longitude )) . multiply ( 111 /* km per degree */ ) . pow ( 2 ) . as ( "longitudeDifference" ) ) . select ( field ( "latitudeDifference" ). add ( field ( "longitudeDifference" )). sqrt () // Inaccurate for large distances or close to poles . as ( "approximateDistanceToGoogle" ) ) . execute ();
Web
const googleplex = { latitude : 37.4221 , longitude : 122.0853 }; const result = await execute ( db . pipeline () . collection ( "cities" ) . addFields ( field ( "lat" ). subtract ( constant ( googleplex . latitude )) . multiply ( 111 /* km per degree */ ) . pow ( 2 ) . as ( "latitudeDifference" ), field ( "lng" ). subtract ( constant ( googleplex . longitude )) . multiply ( 111 /* km per degree */ ) . pow ( 2 ) . as ( "longitudeDifference" ) ) . select ( field ( "latitudeDifference" ). add ( field ( "longitudeDifference" )). sqrt () // Inaccurate for large distances or close to poles . as ( "approximateDistanceToGoogle" ) ) );
Swift
let googleplex = CLLocation ( latitude : 37.4221 , longitude : 122.0853 ) let result = try await db . pipeline () . collection ( "cities" ) . addFields ([ Field ( "lat" ). subtract ( Constant ( googleplex . coordinate . latitude )) . multiply ( 111 /* km per degree */ ) . pow ( 2 ) . as ( "latitudeDifference" ), Field ( "lng" ). subtract ( Constant ( googleplex . coordinate . latitude )) . multiply ( 111 /* km per degree */ ) . pow ( 2 ) . as ( "longitudeDifference" ) ]) . select ([ Field ( "latitudeDifference" ). add ( Field ( "longitudeDifference" )). sqrt () // Inaccurate for large distances or close to poles . as ( "approximateDistanceToGoogle" ) ]) . execute ()
Kotlin
val googleplex = GeoPoint ( 37.4221 , - 122.0853 ) val result = db . pipeline () . collection ( "cities" ) . addFields ( field ( "lat" ). subtract ( googleplex . latitude ) . multiply ( 111 /* km per degree */ ) . pow ( 2 ) . alias ( "latitudeDifference" ), field ( "lng" ). subtract ( googleplex . longitude ) . multiply ( 111 /* km per degree */ ) . pow ( 2 ) . alias ( "longitudeDifference" ) ) . select ( field ( "latitudeDifference" ). add ( field ( "longitudeDifference" )). sqrt () // Inaccurate for large distances or close to poles . alias ( "approximateDistanceToGoogle" ) ) . execute ()
Java
GeoPoint googleplex = new GeoPoint ( 37.4221 , - 122.0853 ); Task<Pipeline . Snapshot > result = db . pipeline () . collection ( "cities" ) . addFields ( field ( "lat" ). subtract ( googleplex . getLatitude ()) . multiply ( 111 /* km per degree */ ) . pow ( 2 ) . alias ( "latitudeDifference" ), field ( "lng" ). subtract ( googleplex . getLongitude ()) . multiply ( 111 /* km per degree */ ) . pow ( 2 ) . alias ( "longitudeDifference" ) ) . select ( field ( "latitudeDifference" ). add ( field ( "longitudeDifference" )). sqrt () // Inaccurate for large distances or close to poles . alias ( "approximateDistanceToGoogle" ) ) . execute ();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field googleplexLat = 37.4221 googleplexLng = - 122.0853 result = ( client . pipeline () . collection ( "cities" ) . add_fields ( Field . of ( "lat" ) . subtract ( googleplexLat ) . multiply ( 111 ) # km per degree . pow ( 2 ) . as_ ( "latitudeDifference" ), Field . of ( "lng" ) . subtract ( googleplexLng ) . multiply ( 111 ) # km per degree . pow ( 2 ) . as_ ( "longitudeDifference" ), ) . select ( Field . of ( "latitudeDifference" ) . add ( Field . of ( "longitudeDifference" )) . sqrt () # Inaccurate for large distances or close to poles . as_ ( "approximateDistanceToGoogle" ) ) . execute () )
Java
double googleplexLat = 37.4221 ; double googleplexLng = - 122.0853 ; Pipeline . Snapshot result = firestore . pipeline () . collection ( "cities" ) . addFields ( pow ( multiply ( subtract ( field ( "lat" ), googleplexLat ), 111 ), 2 ) . as ( "latitudeDifference" ), pow ( multiply ( subtract ( field ( "lng" ), googleplexLng ), 111 ), 2 ) . as ( "longitudeDifference" )) . select ( sqrt ( add ( field ( "latitudeDifference" ), field ( "longitudeDifference" ))) // Inaccurate for large distances or close to poles . as ( "approximateDistanceToGoogle" )) . execute () . get ();
SQRT
Syntax:
sqrt[N <: FLOAT64 | DECIMAL128](number: N) -> N
Description:
Returns the square root of a number
.
- Throws an
errorifnumberis negative.
Examples:
| number | sqrt(number)
|
|---|---|
| 25 | 5.0 |
| 12.002 | 3.464... |
| 0.0 | 0.0 |
NaN
|
NaN
|
+inf
|
+inf
|
-inf
|
[error]
|
x < 0
|
[error]
|
Node.js
const googleplex = { latitude : 37.4221 , longitude : 122.0853 }; const result = await db . pipeline () . collection ( "cities" ) . addFields ( field ( "lat" ). subtract ( constant ( googleplex . latitude )) . multiply ( 111 /* km per degree */ ) . pow ( 2 ) . as ( "latitudeDifference" ), field ( "lng" ). subtract ( constant ( googleplex . longitude )) . multiply ( 111 /* km per degree */ ) . pow ( 2 ) . as ( "longitudeDifference" ) ) . select ( field ( "latitudeDifference" ). add ( field ( "longitudeDifference" )). sqrt () // Inaccurate for large distances or close to poles . as ( "approximateDistanceToGoogle" ) ) . execute ();
Web
const googleplex = { latitude : 37.4221 , longitude : 122.0853 }; const result = await execute ( db . pipeline () . collection ( "cities" ) . addFields ( field ( "lat" ). subtract ( constant ( googleplex . latitude )) . multiply ( 111 /* km per degree */ ) . pow ( 2 ) . as ( "latitudeDifference" ), field ( "lng" ). subtract ( constant ( googleplex . longitude )) . multiply ( 111 /* km per degree */ ) . pow ( 2 ) . as ( "longitudeDifference" ) ) . select ( field ( "latitudeDifference" ). add ( field ( "longitudeDifference" )). sqrt () // Inaccurate for large distances or close to poles . as ( "approximateDistanceToGoogle" ) ) );
Swift
let googleplex = CLLocation ( latitude : 37.4221 , longitude : 122.0853 ) let result = try await db . pipeline () . collection ( "cities" ) . addFields ([ Field ( "lat" ). subtract ( Constant ( googleplex . coordinate . latitude )) . multiply ( 111 /* km per degree */ ) . pow ( 2 ) . as ( "latitudeDifference" ), Field ( "lng" ). subtract ( Constant ( googleplex . coordinate . latitude )) . multiply ( 111 /* km per degree */ ) . pow ( 2 ) . as ( "longitudeDifference" ) ]) . select ([ Field ( "latitudeDifference" ). add ( Field ( "longitudeDifference" )). sqrt () // Inaccurate for large distances or close to poles . as ( "approximateDistanceToGoogle" ) ]) . execute ()
Kotlin
val googleplex = GeoPoint ( 37.4221 , - 122.0853 ) val result = db . pipeline () . collection ( "cities" ) . addFields ( field ( "lat" ). subtract ( googleplex . latitude ) . multiply ( 111 /* km per degree */ ) . pow ( 2 ) . alias ( "latitudeDifference" ), field ( "lng" ). subtract ( googleplex . longitude ) . multiply ( 111 /* km per degree */ ) . pow ( 2 ) . alias ( "longitudeDifference" ) ) . select ( field ( "latitudeDifference" ). add ( field ( "longitudeDifference" )). sqrt () // Inaccurate for large distances or close to poles . alias ( "approximateDistanceToGoogle" ) ) . execute ()
Java
GeoPoint googleplex = new GeoPoint ( 37.4221 , - 122.0853 ); Task<Pipeline . Snapshot > result = db . pipeline () . collection ( "cities" ) . addFields ( field ( "lat" ). subtract ( googleplex . getLatitude ()) . multiply ( 111 /* km per degree */ ) . pow ( 2 ) . alias ( "latitudeDifference" ), field ( "lng" ). subtract ( googleplex . getLongitude ()) . multiply ( 111 /* km per degree */ ) . pow ( 2 ) . alias ( "longitudeDifference" ) ) . select ( field ( "latitudeDifference" ). add ( field ( "longitudeDifference" )). sqrt () // Inaccurate for large distances or close to poles . alias ( "approximateDistanceToGoogle" ) ) . execute ();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field googleplexLat = 37.4221 googleplexLng = - 122.0853 result = ( client . pipeline () . collection ( "cities" ) . add_fields ( Field . of ( "lat" ) . subtract ( googleplexLat ) . multiply ( 111 ) # km per degree . pow ( 2 ) . as_ ( "latitudeDifference" ), Field . of ( "lng" ) . subtract ( googleplexLng ) . multiply ( 111 ) # km per degree . pow ( 2 ) . as_ ( "longitudeDifference" ), ) . select ( Field . of ( "latitudeDifference" ) . add ( Field . of ( "longitudeDifference" )) . sqrt () # Inaccurate for large distances or close to poles . as_ ( "approximateDistanceToGoogle" ) ) . execute () )
Java
double googleplexLat = 37.4221 ; double googleplexLng = - 122.0853 ; Pipeline . Snapshot result = firestore . pipeline () . collection ( "cities" ) . addFields ( pow ( multiply ( subtract ( field ( "lat" ), googleplexLat ), 111 ), 2 ) . as ( "latitudeDifference" ), pow ( multiply ( subtract ( field ( "lng" ), googleplexLng ), 111 ), 2 ) . as ( "longitudeDifference" )) . select ( sqrt ( add ( field ( "latitudeDifference" ), field ( "longitudeDifference" ))) // Inaccurate for large distances or close to poles . as ( "approximateDistanceToGoogle" )) . execute () . get ();
EXP
Syntax:
exp(exponent: FLOAT64) -> FLOAT64
Description:
Returns the value of Euler's number raised to the power of exponent
, also called the natural exponential function.
Examples:
| exponent | exp(exponent)
|
|---|---|
| 0.0 | 1.0 |
| 10 | e^10
( FLOAT64
) |
+inf
|
+inf
|
-inf
|
0 |
Node.js
const result = await db . pipeline () . collection ( "books" ) . select ( field ( "rating" ). exp (). as ( "expRating" )) . execute ();
Web
const result = await execute ( db . pipeline () . collection ( "books" ) . select ( field ( "rating" ). exp (). as ( "expRating" )) );
Swift
let result = try await db . pipeline () . collection ( "books" ) . select ([ Field ( "rating" ). exp (). as ( "expRating" )]) . execute ()
Kotlin
val result = db . pipeline () . collection ( "books" ) . select ( field ( "rating" ). exp (). alias ( "expRating" )) . execute ()
Java
Task<Pipeline . Snapshot > result = db . pipeline () . collection ( "books" ) . select ( field ( "rating" ). exp (). alias ( "expRating" )) . execute ();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client . pipeline () . collection ( "books" ) . select ( Field . of ( "rating" ) . exp () . as_ ( "expRating" )) . execute () )
Java
Pipeline . Snapshot result = firestore . pipeline () . collection ( "books" ) . select ( exp ( field ( "rating" )). as ( "expRating" )) . execute () . get ();
LN
Syntax:
ln(number: FLOAT64) -> FLOAT64
Description:
Returns the natural logarithm of number
. This function is equivalent to log(number)
.
Examples:
| number | ln(number)
|
|---|---|
| 1 | 0.0 |
| 2L | 0.693... |
| 1.0 | 0.0 |
e
( FLOAT64
) |
1.0 |
-inf
|
NaN
|
+inf
|
+inf
|
x <= 0
|
[error]
|
Node.js
const result = await db . pipeline () . collection ( "books" ) . select ( field ( "rating" ). ln (). as ( "lnRating" )) . execute ();
Web
const result = await execute ( db . pipeline () . collection ( "books" ) . select ( field ( "rating" ). ln (). as ( "lnRating" )) );
Swift
let result = try await db . pipeline () . collection ( "books" ) . select ([ Field ( "rating" ). ln (). as ( "lnRating" )]) . execute ()
Kotlin
val result = db . pipeline () . collection ( "books" ) . select ( field ( "rating" ). ln (). alias ( "lnRating" )) . execute ()
Java
Task<Pipeline . Snapshot > result = db . pipeline () . collection ( "books" ) . select ( field ( "rating" ). ln (). alias ( "lnRating" )) . execute ();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client . pipeline () . collection ( "books" ) . select ( Field . of ( "rating" ) . ln () . as_ ( "lnRating" )) . execute () )
Java
Pipeline . Snapshot result = firestore . pipeline () . collection ( "books" ) . select ( ln ( field ( "rating" )). as ( "lnRating" )) . execute () . get ();
LOG
Syntax:
log(number: FLOAT64, base: FLOAT64) -> FLOAT64
log(number: FLOAT64) -> FLOAT64
Description:
Returns the logarithm of a number
to base
.
- If only
numberis provided, returns the logarithm ofnumbertobase(synonymous toln(number)).
Examples:
| number | base | log(number, base)
|
|---|---|---|
|
100
|
10 | 2.0 |
-inf
|
Numeric
|
NaN
|
Numeric
. |
+inf
|
NaN
|
number <= 0
|
Numeric
|
[error]
|
Numeric
|
base <= 0
|
[error]
|
Numeric
|
1.0 | [error]
|
LOG10
Syntax:
log10(x: FLOAT64) -> FLOAT64
Description:
Returns the logarithm of a number
to base 10
.
Examples:
| number | log10(number)
|
|---|---|
| 100 | 2.0 |
-inf
|
NaN
|
+inf
|
+inf
|
x <= 0
|
[error]
|
RAND
Syntax:
rand
()
-
>
FLOAT64
Description:
Return a pseudo-random floating point number, chosen uniformly between 0.0
(inclusive) and 1.0
(exclusive).

