Toutes les fonctions

Aggregate

Toutes les fonctions d'agrégation peuvent être utilisées comme expressions de premier niveau dans l'étape aggregate(...).

Nom Description
COUNT Renvoie le nombre de documents.
COUNT_IF Renvoie le nombre de documents pour lesquels une expression est évaluée à TRUE.
COUNT_DISTINCT Renvoie le nombre de valeurs uniques et non NULL.
SUM Renvoie la somme de toutes les valeurs NUMERIC.
AVERAGE Renvoie la moyenne de toutes les valeurs NUMERIC.
MINIMUM Renvoie la valeur minimale non NULL
MAXIMUM Renvoie la valeur maximale non nulle.NULL
FIRST Renvoie la valeur expression pour le premier document.
LAST Renvoie la valeur expression pour le dernier document.
ARRAY_AGG Renvoie un tableau de toutes les valeurs d'entrée.
ARRAY_AGG_DISTINCT Renvoie un tableau de toutes les valeurs d'entrée distinctes.

COUNT

Syntaxe :

count() -> INT64
count(expression: ANY) -> INT64

Description :

Renvoie le nombre de documents de l'étape précédente où expression est évalué avec une valeur non NULL. Si aucun expression n'est fourni, renvoie le nombre total de documents de l'étape précédente.

Node.js
// Total number of books in the collection
const countOfAll = await db.pipeline()
  .collection("books")
  .aggregate(countAll().as("count"))
  .execute();

// Number of books with nonnull `ratings` field
const countField = await db.pipeline()
  .collection("books")
  .aggregate(field("ratings").count().as("count"))
  .execute();

Web

// Total number of books in the collection
const countOfAll = await execute(db.pipeline()
  .collection("books")
  .aggregate(countAll().as("count"))
);

// Number of books with nonnull `ratings` field
const countField = await execute(db.pipeline()
  .collection("books")
  .aggregate(field("ratings").count().as("count"))
);
Swift
// Total number of books in the collection
let countAll = try await db.pipeline()
  .collection("books")
  .aggregate([CountAll().as("count")])
  .execute()

// Number of books with nonnull `ratings` field
let countField = try await db.pipeline()
  .collection("books")
  .aggregate([Field("ratings").count().as("count")])
  .execute()

Kotlin

// Total number of books in the collection
val countAll = db.pipeline()
    .collection("books")
    .aggregate(AggregateFunction.countAll().alias("count"))
    .execute()

// Number of books with nonnull `ratings` field
val countField = db.pipeline()
    .collection("books")
    .aggregate(AggregateFunction.count("ratings").alias("count"))
    .execute()

Java

// Total number of books in the collection
Task<Pipeline.Snapshot> countAll = db.pipeline()
    .collection("books")
    .aggregate(AggregateFunction.countAll().alias("count"))
    .execute();

// Number of books with nonnull `ratings` field
Task<Pipeline.Snapshot> countField = db.pipeline()
    .collection("books")
    .aggregate(AggregateFunction.count("ratings").alias("count"))
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Count

# Total number of books in the collection
count_all = (
    client.pipeline().collection("books").aggregate(Count().as_("count")).execute()
)

# Number of books with nonnull `ratings` field
count_field = (
    client.pipeline()
    .collection("books")
    .aggregate(Count("ratings").as_("count"))
    .execute()
)
Java
// Total number of books in the collection
Pipeline.Snapshot countAll =
    firestore.pipeline().collection("books").aggregate(countAll().as("count")).execute().get();

// Number of books with nonnull `ratings` field
Pipeline.Snapshot countField =
    firestore
        .pipeline()
        .collection("books")
        .aggregate(count("ratings").as("count"))
        .execute()
        .get();

COUNT_IF

Syntaxe :

count_if(expression: BOOLEAN) -> INT64

Description :

Renvoie le nombre de documents de l'étape précédente où expression est évalué à TRUE.

Node.js
const result = await db.pipeline()
  .collection("books")
  .aggregate(
    field("rating").greaterThan(4).countIf().as("filteredCount")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .aggregate(
    field("rating").greaterThan(4).countIf().as("filteredCount")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .aggregate([
    AggregateFunction("count_if", [Field("rating").greaterThan(4)]).as("filteredCount")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .aggregate(
        AggregateFunction.countIf(field("rating").greaterThan(4)).alias("filteredCount")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .aggregate(
        AggregateFunction.countIf(field("rating").greaterThan(4)).alias("filteredCount")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .aggregate(Field.of("rating").greater_than(4).count_if().as_("filteredCount"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .aggregate(countIf(field("rating").greaterThan(4)).as("filteredCount"))
        .execute()
        .get();

COUNT_DISTINCT

Syntaxe :

count_distinct(expression: ANY) -> INT64

Description :

Renvoie le nombre de valeurs uniques non-NULL et non-ABSENT de expression.

Node.js
const result = await db.pipeline()
  .collection("books")
  .aggregate(field("author").countDistinct().as("unique_authors"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .aggregate(field("author").countDistinct().as("unique_authors"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .aggregate([AggregateFunction("count_distinct", [Field("author")]).as("unique_authors")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .aggregate(AggregateFunction.countDistinct("author").alias("unique_authors"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .aggregate(AggregateFunction.countDistinct("author").alias("unique_authors"))
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .aggregate(Field.of("author").count_distinct().as_("unique_authors"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .aggregate(countDistinct("author").as("unique_authors"))
        .execute()
        .get();

SUM

Syntaxe :

sum(expression: ANY) -> NUMBER

Description :

Renvoie la somme de toutes les valeurs numériques, en ignorant les valeurs non numériques. Renvoie NaN si l'une des valeurs est NaN.

Le résultat aura le même type que le type d'entrée le plus large, sauf dans les cas suivants :

  • Un INTEGER sera converti en DOUBLE s'il ne peut pas être représenté en tant que INTEGER.
Node.js
const result = await db.pipeline()
  .collection("cities")
  .aggregate(field("population").sum().as("totalPopulation"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("cities")
  .aggregate(field("population").sum().as("totalPopulation"))
);
Swift
let result = try await db.pipeline()
  .collection("cities")
  .aggregate([Field("population").sum().as("totalPopulation")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("cities")
    .aggregate(AggregateFunction.sum("population").alias("totalPopulation"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("cities")
    .aggregate(AggregateFunction.sum("population").alias("totalPopulation"))
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("cities")
    .aggregate(Field.of("population").sum().as_("totalPopulation"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("cities")
        .aggregate(sum("population").as("totalPopulation"))
        .execute()
        .get();

MOYENNE

Syntaxe :

average(expression: ANY) -> FLOAT64

Description :

Renvoie la moyenne de toutes les valeurs numériques, en ignorant les valeurs non numériques. Renvoie NaN si l'une des valeurs est NaN, ou NULL si aucune valeur numérique n'est agrégée.

Le résultat aura le même type que le type d'entrée, sauf dans les cas suivants :

  • Un INTEGER sera converti en DOUBLE s'il ne peut pas être représenté en tant que INTEGER.
Node.js
const result = await db.pipeline()
  .collection("cities")
  .aggregate(field("population").average().as("averagePopulation"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("cities")
  .aggregate(field("population").average().as("averagePopulation"))
);
Swift
let result = try await db.pipeline()
  .collection("cities")
  .aggregate([Field("population").average().as("averagePopulation")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("cities")
    .aggregate(AggregateFunction.average("population").alias("averagePopulation"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("cities")
    .aggregate(AggregateFunction.average("population").alias("averagePopulation"))
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("cities")
    .aggregate(Field.of("population").average().as_("averagePopulation"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("cities")
        .aggregate(average("population").as("averagePopulation"))
        .execute()
        .get();

MINIMUM

Syntaxe :

minimum(expression: ANY) -> ANY

Description :

Renvoie la valeur minimale non-NULL et non absente de expression lorsqu'elle est évaluée sur chaque document.

S'il n'y a pas de valeurs non NULL et non absentes, NULL est renvoyé. Cela inclut les cas où aucun document n'est pris en compte.

S'il existe plusieurs valeurs équivalentes minimales, l'une d'entre elles peut être renvoyée. L'ordre des types de valeurs suit l'ordre documenté.

Node.js
const result = await db.pipeline()
  .collection("books")
  .aggregate(field("price").minimum().as("minimumPrice"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .aggregate(field("price").minimum().as("minimumPrice"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .aggregate([Field("price").minimum().as("minimumPrice")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .aggregate(AggregateFunction.minimum("price").alias("minimumPrice"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .aggregate(AggregateFunction.minimum("price").alias("minimumPrice"))
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .aggregate(Field.of("price").minimum().as_("minimumPrice"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .aggregate(minimum("price").as("minimumPrice"))
        .execute()
        .get();

MAXIMUM

Syntaxe :

maximum(expression: ANY) -> ANY

Description :

Renvoie la valeur maximale non nulle et non absente de expression lorsqu'elle est évaluée sur chaque document.NULL

S'il n'y a pas de valeurs non NULL et non absentes, NULL est renvoyé. Cela inclut les cas où aucun document n'est pris en compte.

S'il existe plusieurs valeurs équivalentes maximales, l'une d'entre elles peut être renvoyée. L'ordre des types de valeurs suit l'ordre documenté.

Node.js
const result = await db.pipeline()
  .collection("books")
  .aggregate(field("price").maximum().as("maximumPrice"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .aggregate(field("price").maximum().as("maximumPrice"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .aggregate([Field("price").maximum().as("maximumPrice")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .aggregate(AggregateFunction.maximum("price").alias("maximumPrice"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .aggregate(AggregateFunction.maximum("price").alias("maximumPrice"))
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .aggregate(Field.of("price").maximum().as_("maximumPrice"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .aggregate(maximum("price").as("maximumPrice"))
        .execute()
        .get();

FIRST

Syntaxe :

first(expression: ANY) -> ANY

Description :

Renvoie la valeur de expression pour le premier document renvoyé.

DERNIER

Syntaxe :

last(expression: ANY) -> ANY

Description :

Renvoie la valeur de expression pour le dernier document renvoyé.

ARRAY_AGG

Syntaxe :

array_agg(expression: ANY) -> ARRAY<ANY>

Description :

Renvoie un tableau contenant toutes les valeurs de expression lorsqu'il est évalué sur chaque document.

Si l'expression est résolue sur une valeur absente, elle est convertie en NULL.

L'ordre des éléments dans le tableau de sortie n'est pas stable et ne doit pas être utilisé.

ARRAY_AGG_DISTINCT

Syntaxe :

array_agg_distinct(expression: ANY) -> ARRAY<ANY>

Description :

Renvoie un tableau contenant toutes les valeurs distinctes de expression lorsqu'elles sont évaluées sur chaque document.

Si l'expression est résolue sur une valeur absente, elle est convertie en NULL.

L'ordre des éléments dans le tableau de sortie n'est pas stable et ne doit pas être utilisé.

Fonctions arithmétiques

Toutes les fonctions arithmétiques de Cloud Firestore se comportent de la façon suivante :

  • Renvoie NULL si l'un des paramètres d'entrée est NULL.
  • Renvoie NaN si l'un des arguments est NaN.
  • Cette fonction génère une erreur en cas de débordement ou de dépassement négatif.

De plus, lorsqu'une fonction arithmétique accepte plusieurs arguments numériques de types différents (par exemple, add(5.0, 6)), Cloud Firestore convertit implicitement les arguments au type d'entrée le plus large. Si seules des entrées INT32 sont fournies, le type renvoyé sera INT64.

Nom Description
ABS Renvoie la valeur absolue d'un number.
ADD Renvoie la valeur de x + y
SUBTRACT Renvoie la valeur de x - y
MULTIPLY Renvoie la valeur de x * y
DIVIDE Renvoie la valeur de x / y
MOD Renvoie le reste de la division de x / y
CEIL Renvoie le plafond d'un number.
FLOOR Renvoie la partie entière d'un number.
ROUND Arrondit un number à places décimales
TRUNC Tronque un number à places décimales
POW Renvoie la valeur de base^exponent
SQRT Renvoie la racine carrée d'un number
EXP Renvoie le nombre d'Euler élevé à la puissance de exponent
LN Renvoie le logarithme naturel de number.
LOG Renvoie le logarithme d'un number.
LOG10 Renvoie le logarithme de number en base 10.
RAND Renvoie un nombre à virgule flottante pseudo-aléatoire.

ABS

Syntaxe :

abs[N <: INT32 | INT64 | FLOAT64](number: N) -> N

Description :

Renvoie la valeur absolue d'un number.

  • Génère une erreur lorsque la fonction dépasse la capacité d'une valeur INT32 ou INT64.

Exemples :

nombre abs(number)
10 10
-10 10
10L 10L
-0,0 0,0
10.5 10.5
-10,5 10.5
-231 [error]
-263 [error]

ADD

Syntaxe :

add[N <: INT32 | INT64 | FLOAT64](x: N, y: N) -> N

Description :

Renvoie la valeur de x + y.

Exemples :

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

Syntaxe :

subtract[N <: INT32 | INT64 | FLOAT64](x: N, y: N) -> N

Description :

Renvoie la valeur de x - y.

Exemples :

x y subtract(x, y)
20 3 17
10,0 1 9
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

Syntaxe :

multiply[N <: INT32 | INT64 | FLOAT64](x: N, y: N) -> N

Description :

Renvoie la valeur de x * y.

Exemples :

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

Syntaxe :

divide[N <: INT32 | INT64 | FLOAT64](x: N, y: N) -> N

Description :

Renvoie la valeur de x / y. La division d'entiers est tronquée.

Exemples :

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

Syntaxe :

mod[N <: INT32 | INT64 | FLOAT64](x: N, y: N) -> N

Description :

Renvoie le reste de x / y.

  • Génère une exception error lorsque y est égal à zéro pour les types entiers (INT64).
  • Renvoie NaN lorsque y est égal à zéro pour les types float (FLOAT64).

Exemples :

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

Syntaxe :

ceil[N <: INT32 | INT64 | FLOAT64](number: N) -> N

Description :

Renvoie la plus petite valeur entière qui n'est pas inférieure à number.

Exemples :

nombre 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

Syntaxe :

floor[N <: INT32 | INT64 | FLOAT64](number: N) -> N

Description :

Renvoie la plus grande valeur entière qui n'est pas supérieure à number.

Exemples :

nombre 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();

ARRONDI

Syntaxe :

round[N <: INT32 | INT64 | FLOAT64 | DECIMAL128](number: N) -> N
round[N <: INT32 | INT64 | FLOAT64 | DECIMAL128](number: N, places: INT64) -> N

Description :

Arrondit un number à places chiffres. Arrondit les chiffres à droite de la virgule si places est positif, et à gauche de la virgule s'il est négatif.

  • Si seule number est fournie, arrondit à la valeur entière la plus proche.
  • Arrondit à la valeur la plus éloignée de zéro dans les cas à mi-chemin.
  • Une exception error est générée si l'arrondi avec une valeur places négative entraîne un dépassement de capacité.

Exemples :

nombre de lieux 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
231-1 -1 [error]
263-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();

TRUNC

Syntaxe :

trunc[N <: Number](number: N) -> N
trunc[N <: Number](number:  N, places: INT64) -> N

Description :

Tronque un number à un nombre spécifié de décimales places. Tronque les chiffres à droite de la virgule si places est positif, et à gauche de la virgule s'il est négatif.

  • Si seule number est fournie, la valeur est tronquée au nombre entier le plus proche en direction de zéro.
  • Une erreur error est générée si la troncature entraîne un débordement.

Exemples :

nombre de lieux trunc(number, places)
15.5 0 15,0
-15.5 0 -15,0
15 1 15
15 0 15
15 -1 10
15 -2 0
15.48924 1 15,4
-15.48924 2 -15,48

POW

Syntaxe :

pow(base: FLOAT64, exponent: FLOAT64) -> FLOAT64

Description :

Renvoie la valeur base élevée à la puissance exponent.

  • Génère une erreur si base <= 0 et exponent sont négatifs.

  • Pour tout exponent, pow(1, exponent) est égal à 1.

  • Pour tout base, pow(base, 0) est égal à 1.

Exemples :

base exposant 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

Syntaxe :

sqrt[N <: FLOAT64 | DECIMAL128](number: N) -> N

Description :

Renvoie la racine carrée d'un number.

  • Génère une error si number est négatif.

Exemples :

nombre 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

Syntaxe :

exp(exponent: FLOAT64) -> FLOAT64

Description :

Renvoie la valeur du nombre d'Euler élevé à la puissance exponent. Cette fonction est également appelée "fonction exponentielle naturelle".

Exemples :

exposant 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

Syntaxe :

ln(number: FLOAT64) -> FLOAT64

Description :

Renvoie le logarithme naturel de number. Cette fonction est équivalente à log(number).

Exemples :

nombre 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

Syntaxe :

log(number: FLOAT64, base: FLOAT64) -> FLOAT64
log(number: FLOAT64) -> FLOAT64

Description :

Renvoie le logarithme d'un number à base.

  • Si seule number est fournie, renvoie le logarithme de number à base (synonyme de ln(number)).

Exemples :

nombre 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

Syntaxe :

log10(x: FLOAT64) -> FLOAT64

Description :

Renvoie le logarithme de number en base 10.

Exemples :

nombre log10(number)
100 2.0
-inf NaN
+inf +inf
x <= 0 [error]

RAND

Syntaxe :

rand() -> FLOAT64

Description :

Renvoie un nombre à virgule flottante pseudo-aléatoire, choisi de manière uniforme entre 0.0 (inclus) et 1.0 (exclus).

Fonctions de tableau

Nom Description
ARRAY Renvoie un ARRAY contenant un élément pour chaque argument d'entrée.
ARRAY_CONCAT Concatène plusieurs tableaux en un seul ARRAY
ARRAY_CONTAINS Renvoie TRUE si un ARRAY donné contient une valeur particulière.
ARRAY_CONTAINS_ALL Renvoie TRUE si toutes les valeurs sont présentes dans ARRAY.
ARRAY_CONTAINS_ANY Renvoie TRUE si l'une des valeurs est présente dans ARRAY.
ARRAY_FILTER Filtre les éléments d'un ARRAY qui ne respectent pas un prédicat
ARRAY_FIRST Renvoie le premier élément d'un ARRAY.
ARRAY_FIRST_N Renvoie les premiers éléments n d'un ARRAY.
ARRAY_GET Renvoie l'élément à un index donné dans un ARRAY.
ARRAY_INDEX_OF Renvoie l'index de la première occurrence d'une valeur dans un ARRAY.
ARRAY_INDEX_OF_ALL Renvoie tous les index d'une valeur dans un ARRAY.
ARRAY_LENGTH Renvoie le nombre d'éléments dans un ARRAY.
ARRAY_LAST Renvoie le dernier élément d'un ARRAY.
ARRAY_LAST_N Renvoie les n derniers éléments d'un ARRAY.
ARRAY_REVERSE Inverse l'ordre des éléments dans un ARRAY.
ARRAY_SLICE Renvoie une tranche d'un ARRAY.
ARRAY_TRANSFORM Transforme les éléments d'un ARRAY en appliquant une expression à chacun d'eux.
MAXIMUM Renvoie la valeur maximale dans un ARRAY.
MAXIMUM_N Renvoie les n valeurs les plus élevées d'un ARRAY.
MINIMUM Renvoie la valeur minimale dans un ARRAY.
MINIMUM_N Renvoie les n valeurs les plus petites d'une ARRAY.
SUM Renvoie la somme de toutes les valeurs NUMERIC dans un ARRAY.
JOIN Produit une concaténation des éléments d'un ARRAY sous forme de valeur STRING.

ARRAY

Syntaxe :

array(values: ANY...) -> ARRAY

Description :

Construit un tableau à partir des éléments fournis.

  • Si un argument n'existe pas, il est remplacé par NULL dans le tableau résultant.

Exemples :

valeurs array(values)
() []
(1, 2, 3) [1, 2, 3]
("a", 1, true) ["a", 1, true]
(1, null) [1, null]
(1, [2, 3]) [1, [2, 3]]

ARRAY_CONCAT

Syntaxe :

array_concat(arrays: ARRAY...) -> ARRAY

Description :

Concatène deux tableaux ou plus en un seul ARRAY.

Exemples :

arrays array_concat(arrays)
([1, 2], [3, 4]) [1, 2, 3, 4]
(["a", "b"], ["c"]) ["a", "b", "c"]
([1], [2], [3]) [1, 2, 3]
([], [1, 2]) [1, 2]
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("genre").arrayConcat([field("subGenre")]).as("allGenres"))
  .execute();
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("genre").arrayConcat([Field("subGenre")]).as("allGenres")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(field("genre").arrayConcat(field("subGenre")).alias("allGenres"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(field("genre").arrayConcat(field("subGenre")).alias("allGenres"))
    .execute();
    
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("genre").array_concat(Field.of("subGenre")).as_("allGenres"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(arrayConcat(field("genre"), field("subGenre")).as("allGenres"))
        .execute()
        .get();

ARRAY_CONTAINS

Syntaxe :

array_contains(array: ARRAY, value: ANY) -> BOOLEAN

Description :

Renvoie TRUE si value est trouvé dans array, ou FALSE si ce n'est pas le cas.

Exemples :

tableau valeur array_contains(array, value)
[1, 2, 3] 2 true
[[1, 2], [3]] [1, 2] true
[1, null] null true
"abc" TOUTES erreur
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("genre").arrayContains(constant("mystery")).as("isMystery"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("genre").arrayContains(constant("mystery")).as("isMystery"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("genre").arrayContains(Constant("mystery")).as("isMystery")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(field("genre").arrayContains("mystery").alias("isMystery"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(field("genre").arrayContains("mystery").alias("isMystery"))
    .execute();
    
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("genre").array_contains("mystery").as_("isMystery"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(arrayContains(field("genre"), "mystery").as("isMystery"))
        .execute()
        .get();

ARRAY_CONTAINS_ALL

Syntaxe :

array_contains_all(array: ARRAY, search_values: ARRAY) -> BOOLEAN

Description :

Renvoie TRUE si tous les search_values sont trouvés dans array, et FALSE dans le cas contraire.

Exemples :

tableau search_values array_contains_all(array, search_values)
[1, 2, 3] [1, 2] true
[1, 2, 3] [1, 4] faux
[1, null] [null] true
[NaN] [NaN] true
[] [] true
[1, 2, 3] [] true
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(
    field("genre")
      .arrayContainsAll([constant("fantasy"), constant("adventure")])
      .as("isFantasyAdventure")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("genre")
      .arrayContainsAll([constant("fantasy"), constant("adventure")])
      .as("isFantasyAdventure")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("genre")
      .arrayContainsAll([Constant("fantasy"), Constant("adventure")])
      .as("isFantasyAdventure")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("genre")
            .arrayContainsAll(listOf("fantasy", "adventure"))
            .alias("isFantasyAdventure")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("genre")
            .arrayContainsAll(Arrays.asList("fantasy", "adventure"))
            .alias("isFantasyAdventure")
    )
    .execute();
    
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("genre")
        .array_contains_all(["fantasy", "adventure"])
        .as_("isFantasyAdventure")
    )
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(
            arrayContainsAll(field("genre"), Arrays.asList("fantasy", "adventure"))
                .as("isFantasyAdventure"))
        .execute()
        .get();

ARRAY_CONTAINS_ANY

Syntaxe :

array_contains_any(array: ARRAY, search_values: ARRAY) -> BOOLEAN

Description :

Renvoie TRUE si l'un des search_values est trouvé dans array, ou FALSE si ce n'est pas le cas.

Exemples :

tableau search_values array_contains_any(array, search_values)
[1, 2, 3] [4, 1] true
[1, 2, 3] [4, 5] faux
[1, 2, null] [null] true
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(
    field("genre")
      .arrayContainsAny([constant("fantasy"), constant("nonfiction")])
      .as("isMysteryOrFantasy")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("genre")
      .arrayContainsAny([constant("fantasy"), constant("nonfiction")])
      .as("isMysteryOrFantasy")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("genre")
      .arrayContainsAny([Constant("fantasy"), Constant("nonfiction")])
      .as("isMysteryOrFantasy")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("genre")
            .arrayContainsAny(listOf("fantasy", "nonfiction"))
            .alias("isMysteryOrFantasy")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("genre")
            .arrayContainsAny(Arrays.asList("fantasy", "nonfiction"))
            .alias("isMysteryOrFantasy")
    )
    .execute();
    
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("genre")
        .array_contains_any(["fantasy", "nonfiction"])
        .as_("isMysteryOrFantasy")
    )
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(
            arrayContainsAny(field("genre"), Arrays.asList("fantasy", "nonfiction"))
                .as("isMysteryOrFantasy"))
        .execute()
        .get();

ARRAY_FILTER

Syntaxe :

array_filter(array: ARRAY, predicate: (ANY) -> BOOLEAN) -> ARRAY

Description :

Filtre array à l'aide d'une expression predicate, en renvoyant un nouveau tableau avec uniquement les éléments qui satisfont le prédicat.

  • predicate est évalué pour chaque élément de array. S'il renvoie true, l'élément est inclus dans le résultat. Sinon (s'il renvoie false ou null), il est omis.
  • Si predicate renvoie une valeur non booléenne ou non nulle, la fonction renvoie une erreur.

Exemples :

tableau prédicat array_filter(array, predicate)
[1, 2, 3] x -> x > 1 [2, 3]
[1, null, 3] x -> x > 1 [3]
["a", "b", "c"] x -> x != "b" ["a", "c"]
[] x -> true []

ARRAY_GET

Syntaxe :

array_get(array: ARRAY, index: INT64) -> ANY

Description :

Renvoie l'élément à l'index de base 0 index dans array.

  • Si index est négatif, les éléments sont accessibles à partir de la fin du tableau, où -1 est le dernier élément.
  • Si array n'est pas de type ARRAY et n'est pas null, une erreur est renvoyée.
  • Si index est hors limites, la fonction renvoie une valeur absente.
  • Si index n'est pas de type INT64, la fonction renvoie une erreur.

Exemples :

tableau index array_get(array, index)
[1, 2, 3] 0 1
[1, 2, 3] -1 3
[1, 2, 3] 3 absent
[1, 2, 3] -4 absent
"abc" 0 erreur
null 0 null
Array "a" erreur
Array 2.0 erreur

ARRAY_LENGTH

Syntaxe :

array_length(array: ARRAY) -> INT64

Description :

Renvoie le nombre d'éléments dans array.

Exemples :

tableau array_length(array)
[1, 2, 3] 3
[] 0
[1, 1, 1] 3
[1, null] 2
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("genre").arrayLength().as("genreCount"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("genre").arrayLength().as("genreCount"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("genre").arrayLength().as("genreCount")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(field("genre").arrayLength().alias("genreCount"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(field("genre").arrayLength().alias("genreCount"))
    .execute();
    
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("genre").array_length().as_("genreCount"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(arrayLength(field("genre")).as("genreCount"))
        .execute()
        .get();

ARRAY_REVERSE

Syntaxe :

array_reverse(array: ARRAY) -> ARRAY

Description :

Inverse le array donné.

Exemples :

tableau array_reverse(array)
[1, 2, 3] [3, 2, 1]
["a", "b"] ["b", "a"]
[1, 2, 2, 3] [3, 2, 2, 1]
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(arrayReverse(field("genre")).as("reversedGenres"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("genre").arrayReverse().as("reversedGenres"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("genre").arrayReverse().as("reversedGenres")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(field("genre").arrayReverse().alias("reversedGenres"))
    .execute()
    

Java

Task<Pipeline.Snapshot> result = db.pipeline() .collection("books") .select(field("genre").arrayReverse().alias("reversedGenres")) .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("genre").array_reverse().as_("reversedGenres"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(arrayReverse(field("genre")).as("reversedGenres"))
        .execute()
        .get();

ARRAY_FIRST

Syntaxe :

array_first(array: ARRAY) -> ANY

Description :

Renvoie le premier élément de array. Cela équivaut à array_get(array, 0).

  • Si array est vide, renvoie une valeur absente.

Exemples :

tableau array_first(array)
[1, 2, 3] 1
[] absent

ARRAY_FIRST_N

Syntaxe :

array_first_n(array: ARRAY, n: INT64) -> ARRAY

Description :

Renvoie les n premiers éléments de array. Cela équivaut à array_slice(array, 0, n).

  • Si n est négatif, une erreur est renvoyée.

Exemples :

tableau n array_first_n(array, n)
[1, 2, 3, 4, 5] 3 [1, 2, 3]
[1, 2] 3 [1, 2]
[1, 2, 3] 0 []

ARRAY_INDEX_OF

Syntaxe :

array_index_of(array: ARRAY, value: ANY) -> INT64

Description :

Renvoie l'index de base 0 de la première occurrence de value dans array. Renvoie -1 si value est introuvable.

Exemples :

tableau valeur array_index_of(array, value)
[1, 2, 3, 2] 2 1
[1, 2, 3] 4 -1
[1, null, 3] null 1

ARRAY_INDEX_OF_ALL

Syntaxe :

array_index_of_all(array: ARRAY, value: ANY) -> ARRAY<INT64>

Description :

Renvoie un tableau contenant les index de base 0 de toutes les occurrences de value dans array. Renvoie [] si value est introuvable.

Exemples :

tableau valeur array_index_of_all(array, value)
[1, 2, 3, 2] 2 [1, 3]
[1, 2, 3] 4 []
[1, null, 3, null] null [1, 3]

ARRAY_LAST

Syntaxe :

array_last(array: ARRAY) -> ANY

Description :

Renvoie le dernier élément de array. Cela équivaut à array_get(array, -1).

  • Si array est vide, renvoie une valeur absente.

Exemples :

tableau array_last(array)
[1, 2, 3] 3
[] absent

ARRAY_LAST_N

Syntaxe :

array_last_n(array: ARRAY, n: INT64) -> ARRAY

Description :

Renvoie les n derniers éléments de array.

  • Si n est négatif, une erreur est renvoyée.

Exemples :

tableau n array_last_n(array, n)
[1, 2, 3, 4, 5] 3 [3, 4, 5]
[1, 2] 3 [1, 2]
[1, 2, 3] 0 []

ARRAY_SLICE

Syntaxe :

array_slice(array: ARRAY, offset: INT64, length: INT64) -> ARRAY

Description :

Renvoie un sous-ensemble de array commençant à l'index de base 0 offset et incluant length éléments.

  • Si offset est négatif, il indique la position de départ à partir de la fin du tableau, -1 étant le dernier élément.
  • Si length est supérieur au nombre d'éléments restants dans le tableau après offset, le résultat s'étend jusqu'à la fin du tableau.
  • length ne doit pas être négatif, sinon une erreur est renvoyée.

Exemples :

tableau offset longueur array_slice(array, offset, length)
[1, 2, 3, 4, 5] 1 3 [2, 3, 4]
[1, 2, 3, 4, 5] -2 2 [4, 5]
[1, 2, 3] 1 5 [2, 3]
[1, 2, 3] 3 2 []

ARRAY_TRANSFORM

Syntaxe :

array_transform(array: ARRAY, expression: (ANY) -> ANY) -> ARRAY
array_transform(array: ARRAY, expression: (ANY, INT64) -> ANY) -> ARRAY

Description :

Transforme array en appliquant expression à chaque élément, puis renvoie un tableau avec les éléments transformés. Le tableau de sortie aura toujours la même taille que le tableau d'entrée.

  • expression peut être une fonction unaire element -> result ou une fonction binaire (element, index) -> result.
  • Si expression est unaire, il est appelé avec chaque élément de array.
  • Si expression est binaire, elle est appelée avec chaque élément de array et son index de base 0 correspondant.

Exemples :

tableau expression array_transform(array, expression)
[1, 2, 3] x -> x * 2 [2, 4, 6]
[1, 2, 3] x -> x + 1 [2, 3, 4]
[10, 20] (x, i) -> x + i [10, 21]
[] x -> 1 []

MAXIMUM

Syntaxe :

maximum(array: ARRAY) -> ANY

Description :

Renvoie la valeur maximale dans array.

  • Les valeurs NULL sont ignorées lors de la comparaison.
  • Si array est vide ou ne contient que des valeurs NULL, renvoie NULL.

Exemples :

tableau maximum(array)
[1, 5, 2] 5
[1, null, 5] 5
["a", "c", "b"] "c"
[null, null] null
[] null

MAXIMUM_N

Syntaxe :

maximum_n(array: ARRAY, n: INT64) -> ARRAY

Description :

Renvoie un tableau des n valeurs les plus élevées de array, par ordre décroissant.

  • Les valeurs NULL sont ignorées.
  • Si n est négatif, une erreur est renvoyée.

Exemples :

tableau n maximum_n(array, n)
[1, 5, 2, 4, 3] 3 [5, 4, 3]
[1, null, 5] 3 [5, 1]

MINIMUM

Syntaxe :

minimum(array: ARRAY) -> ANY

Description :

Renvoie la valeur minimale dans array.

  • Les valeurs NULL sont ignorées lors de la comparaison.
  • Si array est vide ou ne contient que des valeurs NULL, renvoie NULL.

Exemples :

tableau minimum(array)
[1, 5, 2] 1
[5, null, 1] 1
["a", "c", "b"] "a"
[null, null] null
[] null

MINIMUM_N

Syntaxe :

minimum_n(array: ARRAY, n: INT64) -> ARRAY

Description :

Renvoie un tableau des n plus petites valeurs de array par ordre croissant.

  • Les valeurs NULL sont ignorées.
  • Si n est négatif, une erreur est renvoyée.

Exemples :

tableau n minimum_n(array, n)
[1, 5, 2, 4, 3] 3 [1, 2, 3]
[5, null, 1] 3 [1, 5]

SUM

Syntaxe :

sum(array: ARRAY) -> INT64 | FLOAT64

Description :

Renvoie la somme de toutes les valeurs NUMERIC dans un ARRAY.

  • Les valeurs non numériques du tableau sont ignorées.
  • Si une valeur numérique du tableau est NaN, la fonction renvoie NaN.
  • Le type renvoyé est déterminé par le type numérique le plus large du tableau : INT64 < FLOAT64.
  • Si un dépassement de capacité d'entier 64 bits se produit avant qu'une valeur à virgule flottante ne soit additionnée, une erreur est renvoyée. Si des valeurs à virgule flottante sont additionnées, un dépassement de capacité entraînera une valeur infinie positive ou négative.
  • Si le tableau ne contient aucune valeur numérique, la fonction renvoie NULL.

Exemples :

tableau sum(array)
[1, 2, 3] 6L
[1L, 2L, 3L] 6L
[2000000000, 2000000000] 4000000000L
[10, 20.5] 30,5
[1, "a", 2] 3L
[INT64.MAX_VALUE, 1] erreur
[INT64.MAX_VALUE, 1, -1.0] erreur
[INT64.MAX_VALUE, 1.0] 9.223372036854776e+18

JOIN

Syntaxe :

join[T <: STRING | BYTES](array: ARRAY<T>, delimiter: T) -> STRING
join[T <: STRING | BYTES](array: ARRAY<T>, delimiter: T, null_text: T) -> STRING

Description :

Renvoie une concaténation des éléments de array sous forme de STRING. array peut être de type STRING ou BYTES.

  • Tous les éléments de array, delimiter et null_text doivent être du même type : ils doivent tous être des STRING ou des BYTES.
  • Si null_text est fourni, toutes les valeurs NULL de array sont remplacées par null_text.
  • Si null_text n'est pas fourni, les valeurs NULL dans array sont omises du résultat.

Exemples :

Lorsque null_text n'est pas fourni :

tableau delimiter join(array, delimiter)
["a", "b", "c"] "," "a,b,c"
["a", null, "c"] "," "a,c"
[b'a', b'b', b'c'] b',' b'a,b,c'
["a", b'c'] "," erreur
["a", "c"] b',' erreur
[b'a', b'c'] "," erreur

Lorsque null_text est fourni :

tableau delimiter null_text join(array, delimiter, null_text)
["a", null, "c"] "," "MISSING" (MANQUANT) "a,MISSING,c"
[b'a', null, b'c'] b',' b'NULL' b'a,NULL,c'
[null, "b", null] "," "MISSING" (MANQUANT) "MISSING,b,MISSING"
[b'a', null, null] b',' b'NULL' b'a,NULL,NULL'
["a", null] "," b'N' erreur
[b'a', null] b',' "N" erreur

Fonctions de comparaison

Nom Description
EQUAL Comparaison d'égalité
GREATER_THAN Comparaison "Supérieur à"
GREATER_THAN_OR_EQUAL Comparaison "supérieur ou égal à"
LESS_THAN Comparaison "Inférieur à"
LESS_THAN_OR_EQUAL Comparaison "inférieur ou égal à"
NOT_EQUAL Comparaison "Est différent de"
CMP Comparaison générale

EQUAL

Syntaxe :

equal(x: ANY, y: ANY) -> BOOLEAN

Exemples :

x y equal(x, y)
1L 1L TRUE
1.0 1L TRUE
-1.0 1L FALSE
NaN NaN TRUE
NULL NULL TRUE
NULL ABSENT FALSE

Description :

Renvoie TRUE si x et y sont égaux, ou FALSE si ce n'est pas le cas.

Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("rating").equal(5).as("hasPerfectRating"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("rating").equal(5).as("hasPerfectRating"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("rating").equal(5).as("hasPerfectRating")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(field("rating").equal(5).alias("hasPerfectRating"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(field("rating").equal(5).alias("hasPerfectRating"))
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("rating").equal(5).as_("hasPerfectRating"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(equal(field("rating"), 5).as("hasPerfectRating"))
        .execute()
        .get();

GREATER_THAN

Syntaxe :

greater_than(x: ANY, y: ANY) -> BOOLEAN

Description :

Renvoie TRUE si la valeur de x est supérieure à y, et FALSE dans le cas contraire.

Si x et y ne sont pas comparables, renvoie FALSE.

Exemples :

x y greater_than(x, y)
1L 0,0 TRUE
1L 1L FALSE
1L 2L FALSE
"foo" 0L FALSE
0L "foo" FALSE
NaN 0L FALSE
0L NaN FALSE
NULL NULL FALSE
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("rating").greaterThan(4).as("hasHighRating"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("rating").greaterThan(4).as("hasHighRating"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("rating").greaterThan(4).as("hasHighRating")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(field("rating").greaterThan(4).alias("hasHighRating"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(field("rating").greaterThan(4).alias("hasHighRating"))
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("rating").greater_than(4).as_("hasHighRating"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(greaterThan(field("rating"), 4).as("hasHighRating"))
        .execute()
        .get();

GREATER_THAN_OR_EQUAL

Syntaxe :

greater_than_or_equal(x: ANY, y: ANY) -> BOOLEAN

Description :

Renvoie TRUE si x est supérieur ou égal à y, et FALSE dans le cas contraire.

Si x et y ne sont pas comparables, renvoie FALSE.

Exemples :

x y greater_than_or_equal(x, y)
1L 0,0 TRUE
1L 1L TRUE
1L 2L FALSE
"foo" 0L FALSE
0L "foo" FALSE
NaN 0L FALSE
0L NaN FALSE
NULL NULL TRUE
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("published").greaterThanOrEqual(1900).as("publishedIn20thCentury"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("published").greaterThanOrEqual(1900).as("publishedIn20thCentury"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("published").greaterThanOrEqual(1900).as("publishedIn20thCentury")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(field("published").greaterThanOrEqual(1900).alias("publishedIn20thCentury"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(field("published").greaterThanOrEqual(1900).alias("publishedIn20thCentury"))
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("published")
        .greater_than_or_equal(1900)
        .as_("publishedIn20thCentury")
    )
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(greaterThanOrEqual(field("published"), 1900).as("publishedIn20thCentury"))
        .execute()
        .get();

LESS_THAN

Syntaxe :

less_than(x: ANY, y: ANY) -> BOOLEAN

Description :

Renvoie TRUE si la valeur de x est inférieure à y, ou FALSE si ce n'est pas le cas.

Si x et y ne sont pas comparables, renvoie FALSE.

Exemples :

x y less_than(x, y)
1L 0,0 FALSE
1L 1L FALSE
1L 2L TRUE
"foo" 0L FALSE
0L "foo" FALSE
NaN 0L FALSE
0L NaN FALSE
NULL NULL FALSE
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("published").lessThan(1923).as("isPublicDomainProbably"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("published").lessThan(1923).as("isPublicDomainProbably"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("published").lessThan(1923).as("isPublicDomainProbably")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(field("published").lessThan(1923).alias("isPublicDomainProbably"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(field("published").lessThan(1923).alias("isPublicDomainProbably"))
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("published").less_than(1923).as_("isPublicDomainProbably"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(lessThan(field("published"), 1923).as("isPublicDomainProbably"))
        .execute()
        .get();

LESS_THAN_OR_EQUAL

Syntaxe :

less_than_or_equal(x: ANY, y: ANY) -> BOOLEAN

Description :

Renvoie TRUE si x est inférieur ou égal à y, et FALSE dans le cas contraire.

Si x et y ne sont pas comparables, renvoie FALSE.

Exemples :

x y less_than(x, y)
1L 0,0 FALSE
1L 1L TRUE
1L 2L TRUE
"foo" 0L FALSE
0L "foo" FALSE
NaN 0L FALSE
0L NaN FALSE
NULL NULL TRUE
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("rating").lessThanOrEqual(2).as("hasBadRating"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("rating").lessThanOrEqual(2).as("hasBadRating"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("rating").lessThanOrEqual(2).as("hasBadRating")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(field("rating").lessThanOrEqual(2).alias("hasBadRating"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(field("rating").lessThanOrEqual(2).alias("hasBadRating"))
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("rating").less_than_or_equal(2).as_("hasBadRating"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(lessThanOrEqual(field("rating"), 2).as("hasBadRating"))
        .execute()
        .get();

NOT_EQUAL

Syntaxe :

not_equal(x: ANY, y: ANY) -> BOOLEAN

Description :

Renvoie TRUE si la valeur de x n'est pas égale à y, ou FALSE si ce n'est pas le cas.

Exemples :

x y not_equal(x, y)
1L 1L FALSE
1.0 1L FALSE
-1.0 1L TRUE
NaN 0L TRUE
NaN NaN FALSE
NULL NULL FALSE
NULL ABSENT TRUE
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("title").notEqual("1984").as("not1984"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("title").notEqual("1984").as("not1984"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("title").notEqual("1984").as("not1984")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(field("title").notEqual("1984").alias("not1984"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(field("title").notEqual("1984").alias("not1984"))
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("title").not_equal("1984").as_("not1984"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(notEqual(field("title"), "1984").as("not1984"))
        .execute()
        .get();

PPR

Syntaxe :

cmp(x: ANY, y: ANY) -> Int64

Description :

Compare x et y, et renvoie :

  • 1L si x est supérieur à y.
  • -1L si x est inférieur à y.
  • Sinon, 0L.

Contrairement aux autres fonctions de comparaison, la fonction cmp(...) fonctionne sur tous les types, en suivant le même ordre que celui utilisé dans l'étape sort(...). Consultez la section Ordre des types de valeurs pour savoir comment les valeurs sont ordonnées selon les types.

Exemples :

x y cmp(x, y)
1L 1L 0L
1.0 1L 0L
-1.0 1L -1L
42.5D "foo" -1L
NULL NULL 0L
NULL ABSENT 0L

Fonctions de débogage

Nom Description
EXISTS Renvoie TRUE si la valeur n'est pas une valeur manquante.
IS_ABSENT Renvoie TRUE si la valeur est absente.
IF_ABSENT Remplace la valeur par une expression si elle est absente.
IS_ERROR Capture et vérifie si une erreur a été générée par l'expression sous-jacente.
IF_ERROR Remplace la valeur par une expression si elle a généré une erreur
ERROR Met fin à l'évaluation et renvoie une erreur avec le message spécifié

EXISTS

Syntaxe :

exists(value: ANY) -> BOOLEAN

Description :

Renvoie TRUE si value n'est pas la valeur absente.

Exemples :

value exists(value)
0L TRUE
"foo" TRUE
NULL TRUE
ABSENT FALSE
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("rating").exists().as("hasRating"))
  .execute();

Web

Exemple :

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("rating").exists().as("hasRating"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("rating").exists().as("hasRating")])
  .execute()

Kotlin

Exemple :

val result = db.pipeline()
    .collection("books")
    .select(field("rating").exists().alias("hasRating"))
    .execute()

Java

Exemple :

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(field("rating").exists().alias("hasRating"))
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("rating").exists().as_("hasRating"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(exists(field("rating")).as("hasRating"))
        .execute()
        .get();

IS_ABSENT

Syntaxe :

is_absent(value: ANY) -> BOOLEAN

Description :

Renvoie TRUE si value est la valeur manquante, et FALSE dans le cas contraire. Les valeurs absentes sont celles qui manquent dans l'entrée, comme un champ de document manquant.

Exemples :

value is_absent(value)
0L FALSE
"foo" FALSE
NULL FALSE
ABSENT TRUE

IF_ABSENT

Syntaxe :

if_absent(value: ANY, replacement: ANY) -> ANY

Description :

Si value est une valeur absente, évalue et renvoie replacement. Sinon, renvoie value.

Exemples :

value replacement if_absent(value, replacement)
5L 0L 5L
NULL 0L NULL
ABSENT 0L 0L

IS_ERROR

Syntaxe :

is_error(try: ANY) -> BOOLEAN

Description :

Renvoie TRUE si une erreur est générée lors de l'évaluation de try. Renvoie FALSE dans les autres cas.

IF_ERROR

Syntaxe :

if_error(try: ANY, catch: ANY) -> ANY

Description :

Si une erreur est générée lors de l'évaluation de try, évalue et renvoie replacement. Sinon, renvoie la valeur résolue de try.

ERREUR

Syntaxe :

error(message: STRING) -> ANY

Description :

L'évaluation de la fonction error entraîne l'arrêt de l'évaluation du pipeline avec une erreur. Le message donné est inclus dans l'erreur.

Exemples :

cond res switch_on(cond, res, error("no condition matched"))
TRUE 1L 1L
FALSE 1L ERROR ("no condition matched")

Fonctions de référence

Le type REFERENCE sert de "pointeur" vers d'autres documents de la base de données (ou même d'autres bases de données). Les fonctions suivantes permettent de manipuler ce type lors de l'exécution de la requête.

Nom Description
COLLECTION_ID Renvoie l'ID de la collection de feuilles dans la référence donnée.
DOCUMENT_ID Renvoie l'ID du document dans la référence donnée.
PARENT Renvoie la référence parente
REFERENCE_SLICE Renvoie un sous-ensemble de segments à partir de la référence donnée.

COLLECTION_ID

Syntaxe :

collection_id(ref: REFERENCE) -> STRING

Description :

Renvoie l'ID de la collection feuille du REFERENCE donné.

Exemples :

ref collection_id(ref)
users/user1 "users"
users/user1/posts/post1 "posts"

DOCUMENT_ID

Syntaxe :

document_id(ref: REFERENCE) -> ANY

Description :

Renvoie l'ID du document du REFERENCE donné.

Exemples :

ref document_id(ref)
users/user1 "user1"
users/user1/posts/post1 "post1"

PARENT

Syntaxe :

parent(ref: REFERENCE) -> REFERENCE

Description :

Renvoie le REFERENCE parent de la référence donnée ou NULL si la référence est déjà une référence racine.

Exemples :

ref parent(ref)
/ NULL
users/user1 /
users/user1/posts/post1 users/user1

REFERENCE_SLICE

Syntaxe :

reference_slice(ref: REFERENCE, offset: INT, length: INT) -> REFERENCE

Description :

Un REFERENCE est une liste de tuples (collection_id, document_id), ce qui permet d'obtenir une vue de cette liste, tout comme array_slice(...).

Renvoie un nouveau REFERENCE qui est un sous-ensemble des segments du ref donné.

  • offset : index de départ (sur base zéro) de la tranche. Si elle est négative, il s'agit d'un décalage par rapport à la fin de la référence.
  • length : nombre de segments à inclure dans le segment.

Exemples :

ref offset length reference_slice(ref, offset, length)
a/1/b/2/c/3 1L 2L b/2/c/3
a/1/b/2/c/3 0L 2L a/1/b/2
a/1/b/2/c/3 -2L 2L c/3

Fonctions logiques

Nom Description
AND Effectue un AND logique
OR Effectue un OR logique
XOR Effectue un XOR logique
NOT Effectue un NOT logique
NOR Effectue un NOR logique
CONDITIONAL Branche l'évaluation en fonction d'une expression conditionnelle.
IF_NULL Renvoie la première valeur non nulle.
SWITCH_ON Évaluation des branches en fonction d'une série de conditions
EQUAL_ANY Vérifie si une valeur est égale à l'un des éléments d'un tableau.
NOT_EQUAL_ANY Vérifie si une valeur n'est égale à aucun élément d'un tableau.
MAXIMUM Renvoie la valeur maximale d'un ensemble de valeurs.
MINIMUM Renvoie la valeur minimale d'un ensemble de valeurs.

ET

Syntaxe :

and(x: BOOLEAN...) -> BOOLEAN

Description :

Renvoie le AND logique de deux valeurs booléennes ou plus.

Renvoie NULL si le résultat ne peut pas être obtenu, car l'une des valeurs indiquées est ABSENT ou NULL.

Exemples :

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

val result = db.pipeline()
    .collection("books")
    .select(
        Expression.and(field("rating").greaterThan(4),
          field("price").lessThan(10))
            .alias("under10Recommendation")
    )
    .execute()

Java

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();

OU

Syntaxe :

or(x: BOOLEAN...) -> BOOLEAN

Description :

Renvoie le OR logique de deux valeurs booléennes ou plus.

Renvoie NULL si le résultat ne peut pas être obtenu, car l'une des valeurs indiquées est ABSENT ou NULL.

Exemples :

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

val result = db.pipeline()
    .collection("books")
    .select(
        Expression.or(field("genre").equal("Fantasy"),
          field("tags").arrayContains("adventure"))
            .alias("matchesSearchFilters")
    )
    .execute()

Java

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

Syntaxe :

xor(x: BOOLEAN...) -> BOOLEAN

Description :

Renvoie la valeur XOR logique de deux valeurs booléennes ou plus.

Renvoie NULL si l'une des valeurs fournies est ABSENT ou NULL.

Exemples :

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

val result = db.pipeline()
    .collection("books")
    .select(
        Expression.xor(field("tags").arrayContains("magic"),
          field("tags").arrayContains("nonfiction"))
            .alias("matchesSearchFilters")
    )
    .execute()

Java

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();

NOR

Syntaxe :

nor(x: BOOLEAN...) -> BOOLEAN

Description :

Renvoie le NOR logique de deux valeurs booléennes ou plus.

Renvoie NULL si le résultat ne peut pas être obtenu, car l'une des valeurs indiquées est ABSENT ou NULL.

Exemples :

x y nor(x, y)
TRUE TRUE FALSE
FALSE TRUE FALSE
FALSE FALSE TRUE
NULL TRUE FALSE
ABSENT TRUE FALSE
NULL FALSE NULL
FALSE ABSENT NULL

NOT

Syntaxe :

not(x: BOOLEAN) -> BOOLEAN

Description :

Renvoie la négation logique d'une valeur booléenne.

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

val result = db.pipeline()
    .collection("books")
    .select(
        Expression.not(
            field("tags").arrayContains("nonfiction")
        ).alias("isFiction")
    )
    .execute()

Java

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();

CONDITIONNEL

Syntaxe :

conditional(condition: BOOLEAN, true_case: ANY, false_case: ANY) -> ANY

Description :

Évalue et renvoie true_case si condition renvoie TRUE.

Évalue et renvoie false_case si la condition est résolue sur une valeur FALSE, NULL ou ABSENT.

Exemples :

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

val result = db.pipeline()
    .collection("books")
    .select(
        field("tags").arrayConcat(
            Expression.conditional(
                field("pages").greaterThan(100),
                constant("longRead"),
                constant("shortRead")
            )
        ).alias("extendedTags")
    )
    .execute()

Java

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();

IF_NULL

Syntaxe :

if_null(expr: ANY, replacement: ANY) -> ANY

Description :

Renvoie expr si la valeur n'est pas NULL, sinon évalue et renvoie replacement. L'expression replacement n'est pas évaluée si expr est utilisé.

Exemples :

expr replacement if_null(expr, replacement)
1L 2L 1L
NULL 2L 2L
ABSENT 2L ABSENT

SWITCH_ON

Syntaxe :

switch_on(cond1: BOOLEAN, res1: ANY, cond2: BOOLEAN, res2: ANY, ..., [default: ANY]) -> ANY

Description :

Évalue une série de conditions et renvoie le résultat associé à la première condition TRUE. Si aucune condition n'est évaluée à TRUE, la valeur default est renvoyée si elle est fournie. Si aucune valeur default n'est fournie, une erreur est générée si aucune autre condition n'a renvoyé la valeur TRUE.

Pour fournir une valeur default, transmettez-la en tant que dernier argument de sorte qu'il y ait un nombre impair d'arguments.

Exemples :

x switch_on(eq(x, 1L), "one", eq(x, 2L), "two", "other")
1L "un"
2L "two"
3L "other"

EQUAL_ANY

Syntaxe :

equal_any(value: ANY, search_space: ARRAY) -> BOOLEAN

Description :

Renvoie TRUE si value se trouve dans le tableau search_space.

Exemples :

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

val result = db.pipeline()
    .collection("books")
    .select(
        field("genre").equalAny(listOf("Science Fiction", "Psychological Thriller"))
            .alias("matchesGenreFilters")
    )
    .execute()

Java

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

Syntaxe :

not_equal_any(value: ANY, search_space: ARRAY) -> BOOLEAN

Description :

Renvoie TRUE si value ne figure pas dans le tableau search_space.

Exemples :

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

val result = db.pipeline()
    .collection("books")
    .select(
        field("author").notEqualAny(listOf("George Orwell", "F. Scott Fitzgerald"))
            .alias("byExcludedAuthors")
    )
    .execute()

Java

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

Syntaxe :

maximum(x: ANY...) -> ANY
maximum(x: ARRAY) -> ANY

Description :

Renvoie la valeur maximale non-NULL et non-ABSENT dans une série de valeurs x.

S'il n'y a pas de valeurs non NULL et non ABSENT, NULL est renvoyé.

S'il existe plusieurs valeurs équivalentes maximales, l'une d'entre elles peut être renvoyée. L'ordre des types de valeurs suit l'ordre documenté.

Exemples :

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

val result = db.pipeline()
    .collection("books")
    .select(
        field("rating").logicalMaximum(1).alias("flooredRating")
    )
    .execute()

Java

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

Syntaxe :

minimum(x: ANY...) -> ANY
minimum(x: ARRAY) -> ANY

Description :

Renvoie la valeur minimale non-NULL et non-ABSENT dans une série de valeurs x.

S'il n'y a pas de valeurs non NULL et non ABSENT, NULL est renvoyé.

S'il existe plusieurs valeurs équivalentes minimales, l'une d'entre elles peut être renvoyée. L'ordre des types de valeurs suit l'ordre documenté.

Exemples :

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

val result = db.pipeline()
    .collection("books")
    .select(
        field("rating").logicalMinimum(5).alias("cappedRating")
    )
    .execute()

Java

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();

Fonctions de carte

Nom Description
MAP Construit une valeur de carte à partir d'une série de paires clé/valeur.
MAP_GET Renvoie la valeur d'une carte pour une clé spécifiée.
MAP_SET Renvoie une copie d'une carte avec une série de clés mises à jour.
MAP_REMOVE Renvoie une copie d'une carte avec une série de clés supprimées.
MAP_MERGE Fusionne une série de cartes.
CURRENT_CONTEXT Renvoie le contexte actuel sous forme de carte.
MAP_KEYS Renvoie un tableau de toutes les clés d'une carte.
MAP_VALUES Renvoie un tableau de toutes les valeurs d'une carte.
MAP_ENTRIES Renvoie un tableau de paires clé/valeur d'une carte.

MAPPAGE

Syntaxe :

map(key: STRING, value: ANY, ...) -> MAP

Description :

Construit une carte à partir d'une série de paires clé/valeur.

MAP_GET

Syntaxe :

map_get(map: ANY, key: STRING) -> ANY

Description :

Renvoie la valeur d'une carte pour une clé spécifiée. Renvoie une valeur ABSENT si key n'existe pas dans la carte ou si l'argument map n'est pas un MAP.

Node.js
const result = await db.pipeline()
  .collection("books")
  .select(
    field("awards").mapGet("pulitzer").as("hasPulitzerAward")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("awards").mapGet("pulitzer").as("hasPulitzerAward")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("awards").mapGet("pulitzer").as("hasPulitzerAward")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("awards").mapGet("pulitzer").alias("hasPulitzerAward")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("awards").mapGet("pulitzer").alias("hasPulitzerAward")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("awards").map_get("pulitzer").as_("hasPulitzerAward"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(mapGet(field("awards"), "pulitzer").as("hasPulitzerAward"))
        .execute()
        .get();

MAP_SET

Syntaxe :

map_set(map: MAP, key: STRING, value: ANY, ...) -> MAP

Description :

Renvoie une copie de la valeur map dont le contenu a été mis à jour par une série de paires clé/valeur.

Si la valeur donnée est absente, la clé associée est supprimée du mappage.

Si l'argument map n'est pas un MAP, renvoie une valeur absente.

MAP_REMOVE

Syntaxe :

map_remove(map: MAP, key: STRING...) -> MAP

Description :

Renvoie une copie de la valeur map avec une série de clés supprimées.

MAP_MERGE

Syntaxe :

map_merge(maps: MAP...) -> MAP

Fusionne le contenu de deux cartes ou plus. Si plusieurs cartes ont des valeurs conflictuelles, la dernière valeur est utilisée.

CURRENT_CONTEXT

Syntaxe :

current_context() -> MAP

Renvoie une carte contenant tous les champs disponibles au point d'exécution actuel.

MAP_KEYS

Syntaxe :

map_keys(map: MAP) -> ARRAY<STRING>

Description :

Renvoie un tableau contenant toutes les clés de la valeur map.

MAP_VALUES

Syntaxe :

map_values(map: MAP) -> ARRAY<ANY>

Description :

Renvoie un tableau contenant toutes les valeurs de map.

MAP_ENTRIES

Syntaxe :

map_entries(map: MAP) -> ARRAY<MAP>

Description :

Renvoie un tableau contenant toutes les paires clé/valeur de la valeur map.

Chaque paire clé-valeur se présentera sous la forme d'une map avec deux entrées, k et v.

Exemples :

map map_entries(map)
{} []
{"foo" : 2L} [{"k": "foo", "v" : 2L}]
{"foo" : "bar", "bar" : "foo"} [{"k": "foo", "v" : "bar" }, {"k" : "bar", "v": "foo"}]

Fonctions de chaîne

Nom Description
BYTE_LENGTH Renvoie le nombre de BYTES dans une valeur STRING ou BYTES.
CHAR_LENGTH Renvoie le nombre de caractères Unicode dans une valeur STRING.
STARTS_WITH Renvoie TRUE si un STRING commence par un préfixe donné.
ENDS_WITH Renvoie TRUE si un STRING se termine par un suffixe donné.
LIKE Renvoie TRUE si une valeur STRING correspond à un modèle.
REGEX_CONTAINS Renvoie TRUE si une valeur correspond partiellement ou totalement à une expression régulière.
REGEX_MATCH Renvoie TRUE si une partie d'une valeur correspond à une expression régulière.
STRING_CONCAT Concatène plusieurs STRING en un STRING
STRING_CONTAINS Renvoie TRUE si une valeur contient une valeur STRING.
STRING_INDEX_OF Renvoie l'index de base 0 de la première occurrence d'une valeur STRING ou BYTES.
TO_UPPER Convertit une valeur STRING ou BYTES en majuscules.
TO_LOWER Convertit une valeur STRING ou BYTES en minuscules.
SUBSTRING Obtient une sous-chaîne d'une valeur STRING ou BYTES.
STRING_REVERSE Inverse une valeur STRING ou BYTES.
STRING_REPEAT Répète une valeur STRING ou BYTES un nombre de fois spécifié.
STRING_REPLACE_ALL Remplace toutes les occurrences d'une valeur STRING ou BYTES.
STRING_REPLACE_ONE Remplace la première occurrence d'une valeur STRING ou BYTES.
TRIM Supprime les caractères de début et de fin d'une valeur STRING ou BYTES.
LTRIM Supprime les caractères de début d'une valeur STRING ou BYTES.
RTRIM Supprime les caractères de fin d'une valeur STRING ou BYTES.
SPLIT Divise une valeur STRING ou BYTES en un tableau.

BYTE_LENGTH

Syntaxe :

byte_length[T <: STRING | BYTES](value: T) -> INT64

Description :

Renvoie le nombre de BYTES dans une valeur STRING ou BYTES.

Exemples :

valeur byte_length(value)
"abc" 3
"xyzabc" 6
b"abc" 3
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(
    field("title").byteLength().as("titleByteLength")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("title").byteLength().as("titleByteLength")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("title").byteLength().as("titleByteLength")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("title").byteLength().alias("titleByteLength")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("title").byteLength().alias("titleByteLength")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("title").byte_length().as_("titleByteLength"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(byteLength(field("title")).as("titleByteLength"))
        .execute()
        .get();

CHAR_LENGTH

Syntaxe :

char_length(value: STRING) -> INT64

Description :

Renvoie le nombre de points de code Unicode dans la valeur STRING.

Exemples :

valeur char_length(value)
"abc" 3
"bonjour" 5
"world" 5
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(
    field("title").charLength().as("titleCharLength")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("title").charLength().as("titleCharLength")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("title").charLength().as("titleCharLength")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("title").charLength().alias("titleCharLength")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("title").charLength().alias("titleCharLength")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("title").char_length().as_("titleCharLength"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(charLength(field("title")).as("titleCharLength"))
        .execute()
        .get();

STARTS_WITH

Syntaxe :

starts_with(value: STRING, prefix: STRING) -> BOOLEAN

Description :

Renvoie TRUE si value commence par prefix.

Exemples :

valeur préfixe starts_with(value, prefix)
"abc" "a" true
"abc" "b" faux
"abc" "" true
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(
    field("title").startsWith("The")
      .as("needsSpecialAlphabeticalSort")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("title").startsWith("The")
      .as("needsSpecialAlphabeticalSort")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("title").startsWith("The")
      .as("needsSpecialAlphabeticalSort")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("title").startsWith("The")
            .alias("needsSpecialAlphabeticalSort")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("title").startsWith("The")
            .alias("needsSpecialAlphabeticalSort")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("title").starts_with("The").as_("needsSpecialAlphabeticalSort")
    )
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(startsWith(field("title"), "The").as("needsSpecialAlphabeticalSort"))
        .execute()
        .get();

ENDS_WITH

Syntaxe :

ends_with(value: STRING, postfix: STRING) -> BOOLEAN

Description :

Renvoie TRUE si value se termine par postfix.

Exemples :

valeur postfix ends_with(value, postfix)
"abc" "c" true
"abc" "b" faux
"abc" "" true
Node.js
const result = await db.pipeline()
  .collection("inventory/devices/laptops")
  .select(
    field("name").endsWith("16 inch")
      .as("16InLaptops")
  )
  .execute();
Swift
let result = try await db.pipeline()
  .collection("inventory/devices/laptops")
  .select([
    Field("name").endsWith("16 inch")
      .as("16InLaptops")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("inventory/devices/laptops")
    .select(
        field("name").endsWith("16 inch")
            .alias("16InLaptops")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("inventory/devices/laptops")
    .select(
        field("name").endsWith("16 inch")
            .alias("16InLaptops")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("inventory/devices/laptops")
    .select(Field.of("name").ends_with("16 inch").as_("16InLaptops"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("inventory/devices/laptops")
        .select(endsWith(field("name"), "16 inch").as("16InLaptops"))
        .execute()
        .get();

J'AIME

Syntaxe :

like(value: STRING, pattern: STRING) -> BOOLEAN

Description :

Renvoie TRUE si value correspond à pattern.

Exemples :

valeur modèle like(value, pattern)
"Firestore" "Fire%" true
"Firestore" "%store" true
"Datastore" "Data_tore" true
"100 %" "100\%" true
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(
    field("genre").like("%Fiction")
      .as("anyFiction")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("genre").like("%Fiction")
      .as("anyFiction")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("genre").like("%Fiction")
      .as("anyFiction")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("genre").like("%Fiction")
            .alias("anyFiction")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("genre").like("%Fiction")
            .alias("anyFiction")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("genre").like("%Fiction").as_("anyFiction"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(like(field("genre"), "%Fiction").as("anyFiction"))
        .execute()
        .get();

REGEX_CONTAINS

Syntaxe :

regex_contains(value: STRING, pattern: STRING) -> BOOLEAN

Description :

Renvoie TRUE si une partie de value correspond à pattern. Si pattern n'est pas une expression régulière valide, cette fonction renvoie error.

Les expressions régulières suivent la syntaxe de la bibliothèque re2.

Exemples :

valeur modèle regex_contains(value, pattern)
"Firestore" "Feu" true
"Firestore" "store$" true
"Firestore" "data" faux
Node.js
const result = await db.pipeline()
  .collection("documents")
  .select(
    field("title").regexContains("Firestore (Enterprise|Standard)")
      .as("isFirestoreRelated")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("documents")
  .select(
    field("title").regexContains("Firestore (Enterprise|Standard)")
      .as("isFirestoreRelated")
  )
);
Swift
let result = try await db.pipeline()
  .collection("documents")
  .select([
    Field("title").regexContains("Firestore (Enterprise|Standard)")
      .as("isFirestoreRelated")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("documents")
    .select(
        field("title").regexContains("Firestore (Enterprise|Standard)")
            .alias("isFirestoreRelated")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("documents")
    .select(
        field("title").regexContains("Firestore (Enterprise|Standard)")
            .alias("isFirestoreRelated")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("documents")
    .select(
        Field.of("title")
        .regex_contains("Firestore (Enterprise|Standard)")
        .as_("isFirestoreRelated")
    )
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("documents")
        .select(
            regexContains(field("title"), "Firestore (Enterprise|Standard)")
                .as("isFirestoreRelated"))
        .execute()
        .get();

REGEX_MATCH

Syntaxe :

regex_match(value: STRING, pattern: STRING) -> BOOLEAN

Description :

Renvoie TRUE si value correspond exactement à pattern. Si pattern n'est pas une expression régulière valide, cette fonction renvoie error.

Les expressions régulières suivent la syntaxe de la bibliothèque re2.

Exemples :

valeur modèle regex_match(value, pattern)
"Firestore" "F.*store" true
"Firestore" "Feu" faux
"Firestore" "^F.*e$" true
Node.js
const result = await db.pipeline()
  .collection("documents")
  .select(
    field("title").regexMatch("Firestore (Enterprise|Standard)")
      .as("isFirestoreExactly")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("documents")
  .select(
    field("title").regexMatch("Firestore (Enterprise|Standard)")
      .as("isFirestoreExactly")
  )
);
Swift
let result = try await db.pipeline()
  .collection("documents")
  .select([
    Field("title").regexMatch("Firestore (Enterprise|Standard)")
      .as("isFirestoreExactly")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("documents")
    .select(
        field("title").regexMatch("Firestore (Enterprise|Standard)")
            .alias("isFirestoreExactly")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("documents")
    .select(
        field("title").regexMatch("Firestore (Enterprise|Standard)")
            .alias("isFirestoreExactly")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("documents")
    .select(
        Field.of("title")
        .regex_match("Firestore (Enterprise|Standard)")
        .as_("isFirestoreExactly")
    )
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("documents")
        .select(
            regexMatch(field("title"), "Firestore (Enterprise|Standard)")
                .as("isFirestoreExactly"))
        .execute()
        .get();

STRING_CONCAT

Syntaxe :

string_concat(values: STRING...) -> STRING

Description :

Concatène deux valeurs STRING ou plus en un seul résultat.

Exemples :

arguments string_concat(values...)
() erreur
("a") "a"
("abc", "def") "abcdef"
("a", "", "c") "ac"
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(
    field("title").stringConcat(" by ", field("author"))
      .as("fullyQualifiedTitle")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("title").stringConcat(" by ", field("author"))
      .as("fullyQualifiedTitle")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("title").concat([" by ", Field("author")])
      .as("fullyQualifiedTitle")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("title").concat(" by ", field("author"))
            .alias("fullyQualifiedTitle")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("title").concat(" by ", field("author"))
            .alias("fullyQualifiedTitle")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("title")
        .concat(" by ", Field.of("author"))
        .as_("fullyQualifiedTitle")
    )
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(stringConcat(field("title"), " by ", field("author")).as("fullyQualifiedTitle"))
        .execute()
        .get();

STRING_CONTAINS

Syntaxe :

string_contains(value: STRING, substring: STRING) -> BOOLEAN

Description :

Vérifie si value contient la chaîne littérale substring.

Exemples :

valeur substring string_contains(value, substring)
"abc" "b" true
"abc" "d" faux
"abc" "" true
"a.c" "." true
"☃☃☃" "☃" true
Node.js
const result = await db.pipeline()
  .collection("articles")
  .select(
    field("body").stringContains("Firestore")
      .as("isFirestoreRelated")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("articles")
  .select(
    field("body").stringContains("Firestore")
      .as("isFirestoreRelated")
  )
);
Swift
let result = try await db.pipeline()
  .collection("articles")
  .select([
    Field("body").stringContains("Firestore")
      .as("isFirestoreRelated")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("articles")
    .select(
        field("body").stringContains("Firestore")
            .alias("isFirestoreRelated")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("articles")
    .select(
        field("body").stringContains("Firestore")
            .alias("isFirestoreRelated")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("articles")
    .select(Field.of("body").string_contains("Firestore").as_("isFirestoreRelated"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("articles")
        .select(stringContains(field("body"), "Firestore").as("isFirestoreRelated"))
        .execute()
        .get();

STRING_INDEX_OF

Syntaxe :

string_index_of[T <: STRING | BYTES](value: T, search: T) -> INT64

Description :

Renvoie l'index de base 0 de la première occurrence de search dans value.

  • Renvoie -1 si search est introuvable.
  • Si value est une valeur STRING, le résultat est mesuré en points de code Unicode. Si la valeur est BYTES, elle est mesurée en octets.
  • Si search est une valeur STRING ou BYTES vide, le résultat est 0.

Exemples :

valeur search string_index_of(value, search)
"hello world" "o" 4
"hello world" "l" 2
"hello world" "z" -1
"banane" "na" 2
"abc" "" 0
b"abc" b"b" 1
"é" "é" 0
b"é" b"é" 0

TO_UPPER

Syntaxe :

to_upper[T <: STRING | BYTES](value: T) -> T

Description :

Convertit une valeur STRING ou BYTES en majuscules.

Si un octet ou un caractère ne correspond pas à un caractère alphabétique minuscule UTF-8, il est transmis sans modification.

Exemples :

valeur to_upper(value)
"abc" "ABC"
"AbC" "ABC"
b"abc" b"ABC"
b"a1c" b"A1C"
Node.js
const result = await db.pipeline()
  .collection("authors")
  .select(
    field("name").toUpper()
      .as("uppercaseName")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("authors")
  .select(
    field("name").toUpper()
      .as("uppercaseName")
  )
);
Swift
let result = try await db.pipeline()
  .collection("authors")
  .select([
    Field("name").toUpper()
      .as("uppercaseName")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("authors")
    .select(
        field("name").toUpper()
            .alias("uppercaseName")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("authors")
    .select(
        field("name").toUpper()
            .alias("uppercaseName")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("authors")
    .select(Field.of("name").to_upper().as_("uppercaseName"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("authors")
        .select(toUpper(field("name")).as("uppercaseName"))
        .execute()
        .get();

TO_LOWER

Syntaxe :

to_lower[T <: STRING | BYTES](value: T) -> T

Description :

Convertit une valeur STRING ou BYTES en minuscules.

Si un octet ou un caractère ne correspond pas à un caractère alphabétique majuscule UTF-8, il est transmis sans modification.

Exemples :

valeur to_lower(value)
"ABC" "abc"
"AbC" "abc"
"A1C" "a1c"
b"ABC" b"abc"
Node.js
const result = await db.pipeline()
  .collection("authors")
  .select(
    field("genre").toLower().equal("fantasy")
      .as("isFantasy")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("authors")
  .select(
    field("genre").toLower().equal("fantasy")
      .as("isFantasy")
  )
);
Swift
let result = try await db.pipeline()
  .collection("authors")
  .select([
    Field("genre").toLower().equal("fantasy")
      .as("isFantasy")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("authors")
    .select(
        field("genre").toLower().equal("fantasy")
            .alias("isFantasy")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("authors")
    .select(
        field("genre").toLower().equal("fantasy")
            .alias("isFantasy")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("authors")
    .select(Field.of("genre").to_lower().equal("fantasy").as_("isFantasy"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("authors")
        .select(equal(toLower(field("genre")), "fantasy").as("isFantasy"))
        .execute()
        .get();

SUBSTRING

Syntaxe :

substring[T <: STRING | BYTES](input: T, position: INT64) -> T
substring[T <: STRING | BYTES](input: T, position: INT64, length: INT64) -> T

Description :

Renvoie une sous-chaîne de input commençant à position (index base zéro) et incluant jusqu'à length entrées. Si aucun length n'est fourni, renvoie la sous-chaîne de position à la fin de input.

  • Si input est une valeur STRING, position et length sont mesurés en points de code Unicode. S'il s'agit d'une valeur BYTES, elle est exprimée en octets.

  • Si la valeur de position est supérieure à la longueur de input, une sous-chaîne vide est renvoyée. Si position plus length est supérieur à la longueur de input, la sous-chaîne est tronquée à la fin de input.

  • Si position est négatif, la position est prise à partir de la fin de l'entrée. Si la valeur négative de position est supérieure à la taille de l'entrée, la position est définie sur zéro. La valeur length ne doit pas être négative.

Exemples :

Lorsque length n'est pas fourni :

entrée position substring(input, position)
"abc" 0 "abc"
"abc" 1 "bc"
"abc" 3 ""
"abc" -1 "c"
b"abc" 1 b"bc"

Lorsque length est fourni :

entrée position longueur substring(input, position, length)
"abc" 0 1 "a"
"abc" 1 2 "bc"
"abc" -1 1 "c"
b"abc" 0 1 b"a"
Node.js
const result = await db.pipeline()
  .collection("books")
  .where(field("title").startsWith("The "))
  .select(
    field("title").substring(4)
      .as("titleWithoutLeadingThe")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .where(field("title").startsWith("The "))
  .select(
    field("title").substring(4)
      .as("titleWithoutLeadingThe")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .where(Field("title").startsWith("The "))
  .select([
    Field("title").substring(position: 4)
      .as("titleWithoutLeadingThe")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .where(field("title").startsWith("The "))
    .select(
        field("title")
          .substring(constant(4),
            field("title").charLength().subtract(4))
            .alias("titleWithoutLeadingThe")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .where(field("title").startsWith("The "))
    .select(
        field("title").substring(
          constant(4),
            field("title").charLength().subtract(4))
            .alias("titleWithoutLeadingThe")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .where(Field.of("title").starts_with("The "))
    .select(Field.of("title").substring(4).as_("titleWithoutLeadingThe"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .where(startsWith(field("title"), "The "))
        .select(
            substring(field("title"), constant(4), field("title").charLength())
                .as("titleWithoutLeadingThe"))
        .execute()
        .get();

STRING_REVERSE

Syntaxe :

string_reverse[T <: STRING | BYTES](input: T) -> T

Description :

Renvoie l'entrée fournie dans l'ordre inverse.

Les caractères sont délimités par des points de code Unicode lorsque l'entrée est une valeur STRING, et par des octets lorsque l'entrée est une valeur BYTES.

Exemples :

entrée string_reverse(input)
"abc" "cba"
"a🌹b" "b🌹a"
"bonjour" "olleh"
b"abc" b"cba"
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(
    field("name").reverse().as("reversedName")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("name").reverse().as("reversedName")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("name").reverse().as("reversedName")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("name").reverse().alias("reversedName")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("name").reverse().alias("reversedName")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("name").string_reverse().as_("reversedName"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(reverse(field("name")).as("reversedName"))
        .execute()
        .get();

STRING_REPEAT

Syntaxe :

string_repeat[T <: STRING | BYTES](input: T, repetitions: INT64) -> T

Description :

Renvoie input répété repetitions fois.

  • repetitions doit être un nombre entier non négatif.
  • Si repetitions est 0, renvoie une valeur vide du même type que input.
  • Si le résultat dépasse la taille maximale autorisée (1 Mo), une erreur est renvoyée.

Exemples :

entrée répétitions string_repeat(input, repetitions)
"foo" 3 "foofoofoo"
"foo" 0 ""
"a " 3 "a a a "
b"ab" 2 b"abab"
"é🦆" 2 "é🦆é🦆"

STRING_REPLACE_ALL

Syntaxe :

string_replace_all[T <: STRING | BYTES](input: T, find: T, replacement: T) -> T

Description :

Remplace toutes les occurrences non chevauchantes de find dans input par replacement.

  • Les correspondances sont sensibles à la casse.
  • Si find est vide, aucun remplacement n'est effectué.

Exemples :

entrée find Valeur de remplacement string_replace_all(input, find, replacement)
"foobarfoo" "foo" "baz" "bazbarbaz"
"ababab" "aba" "c" "cbab"
"foobar" "o" "" "fbar"
"é🦆🌎🦆" "🦆" "a" "éa🌎a"
b"abc" b"b" b"d" b"adc"

STRING_REPLACE_ONE

Syntaxe :

string_replace_one[T <: STRING | BYTES](input: T, find: T, replacement: T) -> T

Description :

Remplace la première occurrence de find dans input par replacement.

  • Les correspondances sont sensibles à la casse.
  • Si find est vide, aucun remplacement n'est effectué.

Exemples :

entrée find Valeur de remplacement string_replace_one(input, find, replacement)
"foobarfoo" "foo" "baz" "bazbarfoo"
"é" "é" "a" "a"
b"foobar" b"o" b"z" b"fzoobar"

TRIM

Syntaxe :

trim[T <: STRING | BYTES](input: T, values_to_trim: T) -> T
trim[T <: STRING | BYTES](input: T) -> T

Description :

Supprime un ensemble spécifié de BYTES ou de CHARS au début et à la fin de la input fournie.

  • Si aucun values_to_trim n'est fourni, les caractères d'espacement sont supprimés.

Exemples :

Lorsque values_to_trim n'est pas fourni :

entrée trim(input)
" foo " "foo"
b" foo " b"foo"
"foo" "foo"
"" ""
" " ""
"\t foo \n" "foo"
b"\t foo \n" b"foo"
"\r\f\v foo \r\f\v" "foo"
b"\r\f\v foo \r\f\v" b"foo"

Lorsque values_to_trim est fourni :

entrée values_to_trim trim(input, values_to_trim)
"abcbfooaacb" "abc" "foo"
"abcdaabadbac" "abc" "daabad"
b"C1C2C3" b"C1" b"C2C3"
b"C1C2" "foo" erreur
"foo" b"C1" erreur

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("name").trim().as("whitespaceTrimmedName")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("name").trim(" \n\t").as("whitespaceTrimmedName")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("name").trim().alias("whitespaceTrimmedName")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("name").trim().alias("whitespaceTrimmedName")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("name").trim().as_("whitespaceTrimmedName"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(trim(field("name")).as("whitespaceTrimmedName"))
        .execute()
        .get();

LTRIM

Syntaxe :

ltrim[T <: STRING | BYTES](value: T, to_trim: T) -> T
ltrim[T <: STRING | BYTES](value: T) -> T

Description :

Supprime un ensemble spécifié de BYTES ou de CHARS au début de la value fournie.

  • Si to_trim n'est pas fourni, les espaces blancs de début sont supprimés.

Exemples :

Lorsque to_trim n'est pas fourni :

valeur ltrim(value)
" foo " "foo "
"foo" "foo"

Lorsque to_trim est fourni :

valeur to_trim ltrim(value, to_trim)
"aaabc" "a" "bc"
"abacaba" "ba" "caba"
"é" "é" ""

RTRIM

Syntaxe :

rtrim[T <: STRING | BYTES](value: T, to_trim: T) -> T
rtrim[T <: STRING | BYTES](value: T) -> T

Description :

Supprime un ensemble spécifié de BYTES ou de CHARS à la fin du value fourni.

  • Si to_trim n'est pas fourni, les espaces blancs de fin sont supprimés.

Exemples :

Lorsque to_trim n'est pas fourni :

valeur rtrim(value)
" foo " " foo"
"foo" "foo"

Lorsque to_trim est fourni :

valeur to_trim rtrim(value, to_trim)
"abccc" "c" "ab"
"abacaba" "ba" "abac"
"é" "é" ""

SPLIT

Syntaxe :

split(input: STRING) -> ARRAY<STRING>
split[T <: STRING | BYTES](input: T, delimiter: T) -> ARRAY<T>

Description :

Fractionne une valeur STRING ou BYTES à l'aide d'un délimiteur.

  • Pour STRING, le délimiteur par défaut est la virgule (,). Le délimiteur est traité comme une chaîne unique.

  • Pour BYTES, vous devez spécifier un délimiteur.

  • Une requête SPLIT faisant référence à un délimiteur vide produit un tableau de points de code Unicode pour les valeurs STRING et un tableau de BYTES pour les valeurs BYTES.

  • Une requête SPLIT sur une STRING vide renvoie un ARRAY contenant une seule STRING vide.

Exemples :

Lorsque delimiter n'est pas fourni :

entrée split(input)
"foo,bar,foo" ["foo", "bar", "foo"]
"foo" ["foo"]
",foo," ["", "foo", ""]
"" [""]
b"C120C2C4" erreur

Lorsque delimiter est fourni :

entrée delimiter split(input, delimiter)
"foo bar foo" " " ["foo", "bar", "foo"]
"foo bar foo" "z" ["foo bar foo"]
"abc" "" ["a", "b", "c"]
b"C1,C2,C4" b"," [b"C1", b"C2", b"C4"]
b"ABC" b"" [b"A", b"B", b"C"]
"foo" b"C1" erreur

Fonctions d'horodatage

Nom Description
CURRENT_TIMESTAMP Génère un TIMESTAMP correspondant à l'heure de la requête.
TIMESTAMP_TRUNC Tronque une valeur TIMESTAMP selon un niveau de précision donné.
UNIX_MICROS_TO_TIMESTAMP Convertit le nombre de microsecondes écoulées depuis 1970-01-01 00:00:00 UTC en TIMESTAMP.
UNIX_MILLIS_TO_TIMESTAMP Convertit le nombre de millisecondes écoulées depuis le 1970-01-01 00:00:00 UTC en TIMESTAMP.
UNIX_SECONDS_TO_TIMESTAMP Convertit le nombre de secondes écoulées depuis le 1970-01-01 00:00:00 UTC en TIMESTAMP.
TIMESTAMP_ADD Ajoute un intervalle de temps à une TIMESTAMP
TIMESTAMP_SUB Soustrait un intervalle de temps à une valeur TIMESTAMP.
TIMESTAMP_TO_UNIX_MICROS Convertit une valeur TIMESTAMP en nombre de microsecondes depuis 1970-01-01 00:00:00 UTC.
TIMESTAMP_TO_UNIX_MILLIS Convertit un TIMESTAMP en nombre de millisecondes depuis 1970-01-01 00:00:00 UTC.
TIMESTAMP_TO_UNIX_SECONDS Convertit un TIMESTAMP en nombre de secondes écoulées depuis le 1970-01-01 00:00:00 UTC.
TIMESTAMP_DIFF Renvoie le nombre entier d'intervalles unit spécifiés entre deux TIMESTAMP.
TIMESTAMP_EXTRACT Extrait un part spécifique (par exemple, l'année, le mois ou le jour) d'un TIMESTAMP.

CURRENT_TIMESTAMP

Syntaxe :

current_timestamp() -> TIMESTAMP

Description :

Obtient le code temporel au début de l'heure de la requête input (interprété comme le nombre de microsecondes écoulées depuis 1970-01-01 00:00:00 UTC).

Cette valeur est stable dans une requête et sera toujours résolue avec la même valeur si elle est appelée plusieurs fois.

TIMESTAMP_TRUNC

Syntaxe :

timestamp_trunc(timestamp: TIMESTAMP, granularity: STRING[, timezone: STRING]) -> TIMESTAMP

Description :

Tronque un code temporel selon un niveau de précision donné.

L'argument granularity doit être une chaîne et l'un des suivants :

  • microsecond
  • millisecond
  • second
  • minute
  • hour
  • day
  • week
  • week([weekday])
  • month
  • quarter
  • year
  • isoyear

Si l'argument timezone est fourni, la troncature sera basée sur les limites du calendrier du fuseau horaire donné (par exemple, la troncature au jour tronquera à minuit dans le fuseau horaire donné). La troncature respectera l'heure d'été.

Si timezone n'est pas fourni, la troncature sera basée sur les limites du calendrier UTC.

L'argument timezone doit être une représentation de chaîne d'un fuseau horaire de la base de données tz, par exemple America/New_York. Vous pouvez également utiliser un décalage temporel personnalisé en spécifiant un décalage par rapport à GMT.

Exemples :

timestamp granularity timezone timestamp_trunc(timestamp, granularity, timezone)
2000-01-01 10:20:30:123456 UTC "second" Non fourni 2001-01-01 10:20:30 UTC
1997-05-31 04:30:30 UTC "day" Non fourni 1997-05-31 00:00:00 UTC
1997-05-31 04:30:30 UTC "day" "America/Los_Angeles" 1997-05-30 07:00:00 UTC
2001-03-16 04:00:00 UTC "week(friday) Non fourni 2001-03-16 00:00:00 UTC
2001-03-23 04:00:00 UTC "week(friday) "America/Los_Angeles" 2001-03-23 17:00:00 UTC
2026-01-24 20:00:00 UTC "month" "GMT+06:32:43" 2026-01-01T06:32:43 UTC

UNIX_MICROS_TO_TIMESTAMP

Syntaxe :

unix_micros_to_timestamp(input: INT64) -> TIMESTAMP

Description :

Convertit input (interprété comme le nombre de microsecondes écoulées depuis 1970-01-01 00:00:00 UTC) en TIMESTAMP. Génère une error si input ne peut pas être converti en TIMESTAMP valide.

Exemples :

input unix_micros_to_timestamp(input)
0L 1970-01-01 00:00:00 UTC
400123456L 1970-01-01 00:06:40.123456 UTC
-1000000L 1969-12-31 23:59:59 UTC
Node.js
const result = await db.pipeline()
  .collection("documents")
  .select(
    field("createdAtMicros").unixMicrosToTimestamp().as("createdAtString")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("documents")
  .select(
    field("createdAtMicros").unixMicrosToTimestamp().as("createdAtString")
  )
);
Swift
let result = try await db.pipeline()
  .collection("documents")
  .select([
    Field("createdAtMicros").unixMicrosToTimestamp().as("createdAtString")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("documents")
    .select(
        field("createdAtMicros").unixMicrosToTimestamp().alias("createdAtString")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("documents")
    .select(
        field("createdAtMicros").unixMicrosToTimestamp().alias("createdAtString")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("documents")
    .select(
        Field.of("createdAtMicros")
        .unix_micros_to_timestamp()
        .as_("createdAtString")
    )
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("documents")
        .select(unixMicrosToTimestamp(field("createdAtMicros")).as("createdAtString"))
        .execute()
        .get();

UNIX_MILLIS_TO_TIMESTAMP

Syntaxe :

unix_millis_to_timestamp(input: INT64) -> TIMESTAMP

Description :

Convertit input (interprété comme le nombre de millisecondes écoulées depuis 1970-01-01 00:00:00 UTC) en TIMESTAMP. Génère une error si input ne peut pas être converti en TIMESTAMP valide.

Exemples :

input unix_millis_to_timestamp(input)
0L 1970-01-01 00:00:00 UTC
4000123L 1970-01-01 01:06:40.123 UTC
-1000000L 1969-12-31 23:43:20 UTC
Node.js
const result = await db.pipeline()
  .collection("documents")
  .select(
    field("createdAtMillis").unixMillisToTimestamp().as("createdAtString")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("documents")
  .select(
    field("createdAtMillis").unixMillisToTimestamp().as("createdAtString")
  )
);
Swift
let result = try await db.pipeline()
  .collection("documents")
  .select([
    Field("createdAtMillis").unixMillisToTimestamp().as("createdAtString")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("documents")
    .select(
        field("createdAtMillis").unixMillisToTimestamp().alias("createdAtString")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("documents")
    .select(
        field("createdAtMillis").unixMillisToTimestamp().alias("createdAtString")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("documents")
    .select(
        Field.of("createdAtMillis")
        .unix_millis_to_timestamp()
        .as_("createdAtString")
    )
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("documents")
        .select(unixMillisToTimestamp(field("createdAtMillis")).as("createdAtString"))
        .execute()
        .get();

UNIX_SECONDS_TO_TIMESTAMP

Syntaxe :

unix_seconds_to_timestamp(input: INT64) -> TIMESTAMP

Description :

Convertit input (interprété comme le nombre de secondes écoulées depuis 1970-01-01 00:00:00 UTC) en TIMESTAMP. Génère une error si input ne peut pas être converti en TIMESTAMP valide.

Exemples :

input unix_seconds_to_timestamp(input)
0L 1970-01-01 00:00:00 UTC
60L 1970-01-01 00:01:00 UTC
-300L 1969-12-31 23:55:00 UTC
Node.js
const result = await db.pipeline()
  .collection("documents")
  .select(
    field("createdAtSeconds").unixSecondsToTimestamp().as("createdAtString")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("documents")
  .select(
    field("createdAtSeconds").unixSecondsToTimestamp().as("createdAtString")
  )
);
Swift
let result = try await db.pipeline()
  .collection("documents")
  .select([
    Field("createdAtSeconds").unixSecondsToTimestamp().as("createdAtString")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("documents")
    .select(
        field("createdAtSeconds").unixSecondsToTimestamp().alias("createdAtString")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("documents")
    .select(
        field("createdAtSeconds").unixSecondsToTimestamp().alias("createdAtString")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("documents")
    .select(
        Field.of("createdAtSeconds")
        .unix_seconds_to_timestamp()
        .as_("createdAtString")
    )
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("documents")
        .select(unixSecondsToTimestamp(field("createdAtSeconds")).as("createdAtString"))
        .execute()
        .get();

TIMESTAMP_ADD

Syntaxe :

timestamp_add(timestamp: TIMESTAMP, unit: STRING, amount: INT64) -> TIMESTAMP

Description :

Ajoute un amount de unit à partir de timestamp. L'argument amount peut être négatif. Dans ce cas, il équivaut à TIMESTAMP_SUB.

L'argument unit doit être une chaîne et l'un des suivants :

  • microsecond
  • millisecond
  • second
  • minute
  • hour
  • day

Génère une erreur si l'horodatage obtenu ne correspond pas à la plage TIMESTAMP.

Exemples :

timestamp unit amount timestamp_add(timestamp, unit, amount)
2025-02-20 00:00:00 UTC "minute" 2L 2025-02-20 00:02:00 UTC
2025-02-20 00:00:00 UTC "hour" -4L 2025-02-19 20:00:00 UTC
2025-02-20 00:00:00 UTC "day" 5L 2025-02-25 00:00:00 UTC
Node.js
const result = await db.pipeline()
  .collection("documents")
  .select(
    field("createdAt").timestampAdd("day", 3653).as("expiresAt")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("documents")
  .select(
    field("createdAt").timestampAdd("day", 3653).as("expiresAt")
  )
);
Swift
let result = try await db.pipeline()
  .collection("documents")
  .select([
    Field("createdAt").timestampAdd(3653, .day).as("expiresAt")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("documents")
    .select(
        field("createdAt")
          .timestampAdd("day", 3653)
          .alias("expiresAt")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("documents")
    .select(
        field("createdAt").timestampAdd("day", 3653).alias("expiresAt")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("documents")
    .select(Field.of("createdAt").timestamp_add("day", 3653).as_("expiresAt"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("documents")
        .select(timestampAdd(field("createdAt"), "day", 3653).as("expiresAt"))
        .execute()
        .get();

TIMESTAMP_SUB

Syntaxe :

timestamp_sub(timestamp: TIMESTAMP, unit: STRING, amount: INT64) -> TIMESTAMP

Description :

Soustrait une amount de unit à timestamp. L'argument amount peut être négatif. Dans ce cas, il est équivalent à TIMESTAMP_ADD.

L'argument unit doit être une chaîne et l'un des suivants :

  • microsecond
  • millisecond
  • second
  • minute
  • hour
  • day

Génère une erreur si l'horodatage obtenu ne correspond pas à la plage TIMESTAMP.

Exemples :

timestamp unit amount timestamp_sub(timestamp, unit, amount)
2026-07-04 00:00:00 UTC "minute" 40L 2026-07-03 23:20:00 UTC
2026-07-04 00:00:00 UTC "hour" -24L 2026-07-05 00:00:00 UTC
2026-07-04 00:00:00 UTC "day" 3L 2026-07-01 00:00:00 UTC
Node.js
const result = await db.pipeline()
  .collection("documents")
  .select(
    field("expiresAt").timestampSubtract("day", 14).as("sendWarningTimestamp")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("documents")
  .select(
    field("expiresAt").timestampSubtract("day", 14).as("sendWarningTimestamp")
  )
);
Swift
let result = try await db.pipeline()
  .collection("documents")
  .select([
    Field("expiresAt").timestampSubtract(14, .day).as("sendWarningTimestamp")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("documents")
    .select(
        field("expiresAt")
          .timestampSubtract("day", 14)
          .alias("sendWarningTimestamp")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("documents")
    .select(
        field("expiresAt").timestampSubtract("day", 14).alias("sendWarningTimestamp")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("documents")
    .select(
        Field.of("expiresAt")
        .timestamp_subtract("day", 14)
        .as_("sendWarningTimestamp")
    )
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("documents")
        .select(timestampSubtract(field("expiresAt"), "day", 14).as("sendWarningTimestamp"))
        .execute()
        .get();

TIMESTAMP_TO_UNIX_MICROS

Syntaxe :

timestamp_to_unix_micros(input: TIMESTAMP) -> INT64

Description :

Convertit input en nombre de microsecondes depuis 1970-01-01 00:00:00 UTC. Tronque les niveaux de précision plus élevés en arrondissant au début de la microseconde.

Exemples :

input timestamp_to_unix_micros(input)
1970-01-01 00:00:00 UTC 0L
1970-01-01 00:06:40.123456 UTC 400123456L
1969-12-31 23:59:59 UTC -1000000L
Node.js
const result = await db.pipeline()
  .collection("documents")
  .select(
    field("dateString").timestampToUnixMicros().as("unixMicros")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("documents")
  .select(
    field("dateString").timestampToUnixMicros().as("unixMicros")
  )
);
Swift
let result = try await db.pipeline()
  .collection("documents")
  .select([
    Field("dateString").timestampToUnixMicros().as("unixMicros")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("documents")
    .select(
        field("dateString").timestampToUnixMicros().alias("unixMicros")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("documents")
    .select(
        field("dateString").timestampToUnixMicros().alias("unixMicros")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("documents")
    .select(Field.of("dateString").timestamp_to_unix_micros().as_("unixMicros"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("documents")
        .select(timestampToUnixMicros(field("dateString")).as("unixMicros"))
        .execute()
        .get();

TIMESTAMP_TO_UNIX_MILLIS

Syntaxe :

timestamp_to_unix_millis(input: TIMESTAMP) -> INT64

Description :

Convertit input en nombre de millisecondes écoulées depuis 1970-01-01 00:00:00 UTC. Tronque les niveaux de précision plus élevés en arrondissant au début de la milliseconde.

Exemples :

input timestamp_to_unix_millis(input)
1970-01-01 00:00:00 UTC 0L
1970-01-01 01:06:40.123 UTC 4000123L
1969-12-31 23:43:20 -1000000L
Node.js
const result = await db.pipeline()
  .collection("documents")
  .select(
    field("dateString").timestampToUnixMillis().as("unixMillis")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("documents")
  .select(
    field("dateString").timestampToUnixMillis().as("unixMillis")
  )
);
Swift
let result = try await db.pipeline()
  .collection("documents")
  .select([
    Field("dateString").timestampToUnixMillis().as("unixMillis")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("documents")
    .select(
        field("dateString").timestampToUnixMillis().alias("unixMillis")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("documents")
    .select(
        field("dateString").timestampToUnixMillis().alias("unixMillis")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("documents")
    .select(Field.of("dateString").timestamp_to_unix_millis().as_("unixMillis"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("documents")
        .select(timestampToUnixMillis(field("dateString")).as("unixMillis"))
        .execute()
        .get();

TIMESTAMP_TO_UNIX_SECONDS

Syntaxe :

timestamp_to_unix_seconds(input: TIMESTAMP) -> INT64

Description :

Convertit input en nombre de secondes écoulées depuis le 1970-01-01 00:00:00 UTC. Tronque les niveaux de précision plus élevés en arrondissant au début de la seconde.

Exemples :

input timestamp_to_unix_seconds(input)
1970-01-01 00:00:00 UTC 0L
1970-01-01 00:01:00 UTC 60L
1969-12-31 23:55:00 UTC -300L
Node.js
const result = await db.pipeline()
  .collection("documents")
  .select(
    field("dateString").timestampToUnixSeconds().as("unixSeconds")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("documents")
  .select(
    field("dateString").timestampToUnixSeconds().as("unixSeconds")
  )
);
Swift
let result = try await db.pipeline()
  .collection("documents")
  .select([
    Field("dateString").timestampToUnixSeconds().as("unixSeconds")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("documents")
    .select(
        field("dateString").timestampToUnixSeconds().alias("unixSeconds")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("documents")
    .select(
        field("dateString").timestampToUnixSeconds().alias("unixSeconds")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("documents")
    .select(Field.of("dateString").timestamp_to_unix_seconds().as_("unixSeconds"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("documents")
        .select(timestampToUnixSeconds(field("dateString")).as("unixSeconds"))
        .execute()
        .get();

TIMESTAMP_DIFF

Syntaxe :

timestamp_diff(end: TIMESTAMP, start: TIMESTAMP, unit: STRING) -> INT64

Description :

Renvoie le nombre entier d'intervalles unit spécifiés entre deux TIMESTAMP.

  • Renvoie une valeur négative si end est avant start.
  • Tronque toute unité fractionnaire. Par exemple, timestamp_diff("2021-01-01 00:00:01", "2021-01-01 00:00:00", "minute") affiche 0.

L'argument unit doit être une chaîne et l'un des suivants :

  • microsecond
  • millisecond
  • second
  • minute
  • hour
  • day

Exemples :

end start unit timestamp_diff(end, start, unit)
2026-07-04 00:01:00 UTC 2026-07-04 00:00:00 UTC "second" 60L
2026-07-04 00:00:00 UTC 2026-07-05 00:00:00 UTC "day" -1L
2026-07-04 00:00:59 UTC 2026-07-04 00:00:00 UTC "minute" 0L

TIMESTAMP_EXTRACT

Syntaxe :

timestamp_extract(timestamp: TIMESTAMP, part: STRING[, timezone: STRING]) -> INT64

Description :

Extrait un part spécifique (par exemple, l'année, le mois ou le jour) de timestamp.

L'argument part doit être une chaîne et l'un des suivants :

  • microsecond
  • millisecond
  • second
  • minute
  • hour
  • day
  • dayofweek : renvoie une valeur comprise entre 1 (dimanche) et 7 (samedi).
  • dayofyear
  • week : renvoie le numéro de la semaine dans l'année, en commençant par 1 pour le premier dimanche de l'année.
  • week([weekday]) : renvoie le numéro de semaine de l'année, en commençant par le weekday spécifié.
  • month
  • quarter
  • year
  • isoweek : renvoie le numéro de semaine ISO 8601.
  • isoyear : renvoie l'année à numérotation de semaine ISO 8601.

Si l'argument timezone est fourni, l'extraction sera basée sur le calendrier du fuseau horaire indiqué. L'extraction respectera l'heure d'été.

Si timezone n'est pas fourni, l'extraction sera basée sur UTC.

L'argument timezone doit être une représentation de chaîne d'un fuseau horaire de la base de données de fuseaux horaires, par exemple America/New_York. Vous pouvez également utiliser un horodatage personnalisé en spécifiant un décalage par rapport à GMT.

Exemples :

timestamp part timezone timestamp_extract(timestamp, part, timezone)
2025-02-20 10:20:30 UTC "year" Non fourni 2025
2025-02-20 10:20:30 UTC "day" Non fourni 20
2025-12-31 23:59:59 UTC "year" "Asia/Tokyo" 2026

Fonctions de type

Nom Description
TYPE Renvoie le type de la valeur sous la forme d'un STRING.
IS_TYPE Renvoie true si la valeur correspond au type spécifié.

TYPE

Syntaxe :

type(input: ANY) -> STRING

Description :

Renvoie une représentation sous forme de chaîne du type input.

Si une valeur absente est fournie, renvoie NULL.

Exemples :

input type(input)
NULL "null"
true "boolean"
1 "int32"
-3L "int64"
3.14 "float64"
2024-01-01T00:00:00Z UTC "timestamp"
"foo" "string"
b"foo" "bytes"
[1, 2] "array"
{"a": 1} "map"
path("c/d") "reference"
vector([1.0, 2.0]) "vector"
ABSENT NULL

Exemples de clients

Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("title").notEqual("1984").as("not1984"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("title").notEqual("1984").as("not1984"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("title").notEqual("1984").as("not1984")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(field("title").notEqual("1984").alias("not1984"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(field("title").notEqual("1984").alias("not1984"))
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("title").not_equal("1984").as_("not1984"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(notEqual(field("title"), "1984").as("not1984"))
        .execute()
        .get();

IS_TYPE

Syntaxe :

is_type(input: ANY, type: STRING) -> BOOLEAN

Description :

Renvoie true si le input correspond au type spécifié, ou false dans le cas contraire. Si une valeur input est absente, renvoie NULL.

Les chaînes type acceptées sont les suivantes :

  • "null"
  • "boolean"
  • "int32"
  • "int64"
  • "float64"
  • "decimal128"
  • "number"
  • "timestamp"
  • "string"
  • "bytes"
  • "array"
  • "map"
  • "reference"
  • "vector"
  • "geo_point"
  • "max_key"
  • "min_key"
  • "object_id"
  • "regex"
  • "bson_timestamp"

Exemples :

input type is_type(input, type)
NULL "null" true
true "boolean" true
3.14 "float64" true
"foo" "string" true
b"foo" "string" faux
[1, 2] "array" true
{"a": 1} "map" true
vector([1.0, 2.0]) "vector" true
ABSENT "string" NULL
"bar" "other" ERREUR

Fonctions vectorielles

Nom Description
COSINE_DISTANCE Renvoie la distance cosinus entre deux vecteurs.
DOT_PRODUCT Renvoie le produit scalaire entre deux vecteurs.
EUCLIDEAN_DISTANCE Renvoie la distance euclidienne entre deux vecteurs.
MANHATTAN_DISTANCE Renvoie la distance de Manhattan entre deux vecteurs.
VECTOR_LENGTH Renvoie le nombre d'éléments d'un vecteur.

COSINE_DISTANCE

Syntaxe :

cosine_distance(x: VECTOR, y: VECTOR) -> FLOAT64

Description :

Renvoie la distance cosinus entre x et y.

Node.js
const sampleVector = [0.0, 1, 2, 3, 4, 5];
const result = await db.pipeline()
  .collection("books")
  .select(
    field("embedding").cosineDistance(sampleVector).as("cosineDistance")
  )
  .execute();

Web

const sampleVector = [0.0, 1, 2, 3, 4, 5];
const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("embedding").cosineDistance(sampleVector).as("cosineDistance")));
Swift
let sampleVector = [0.0, 1, 2, 3, 4, 5]
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("embedding").cosineDistance(sampleVector).as("cosineDistance")
  ])
  .execute()

Kotlin

val sampleVector = doubleArrayOf(0.0, 1.0, 2.0, 3.0, 4.0, 5.0)
val result = db.pipeline()
    .collection("books")
    .select(
        field("embedding").cosineDistance(sampleVector).alias("cosineDistance")
    )
    .execute()

Java

double[] sampleVector = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0};
Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("embedding").cosineDistance(sampleVector).alias("cosineDistance")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field
from google.cloud.firestore_v1.vector import Vector

sample_vector = Vector([0.0, 1.0, 2.0, 3.0, 4.0, 5.0])
result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("embedding").cosine_distance(sample_vector).as_("cosineDistance")
    )
    .execute()
)
Java
double[] sampleVector = new double[] {0.0, 1.0, 2.0, 3.0, 4.0, 5.0};
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(cosineDistance(field("embedding"), sampleVector).as("cosineDistance"))
        .execute()
        .get();

DOT_PRODUCT

Syntaxe :

dot_product(x: VECTOR, y: VECTOR) -> FLOAT64

Description :

Renvoie le produit scalaire de x et y.

Node.js
const sampleVector = [0.0, 1, 2, 3, 4, 5];
const result = await db.pipeline()
  .collection("books")
  .select(
    field("embedding").dotProduct(sampleVector).as("dotProduct")
  )
  .execute();

Web

const sampleVector = [0.0, 1, 2, 3, 4, 5];
const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("embedding").dotProduct(sampleVector).as("dotProduct")
  )
);
Swift
let sampleVector = [0.0, 1, 2, 3, 4, 5]
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("embedding").dotProduct(sampleVector).as("dotProduct")
  ])
  .execute()

Kotlin

val sampleVector = doubleArrayOf(0.0, 1.0, 2.0, 3.0, 4.0, 5.0)
val result = db.pipeline()
    .collection("books")
    .select(
        field("embedding").dotProduct(sampleVector).alias("dotProduct")
    )
    .execute()

Java

double[] sampleVector = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0};
Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("embedding").dotProduct(sampleVector).alias("dotProduct")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field
from google.cloud.firestore_v1.vector import Vector

sample_vector = Vector([0.0, 1.0, 2.0, 3.0, 4.0, 5.0])
result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("embedding").dot_product(sample_vector).as_("dotProduct"))
    .execute()
)
Java
double[] sampleVector = new double[] {0.0, 1.0, 2.0, 3.0, 4.0, 5.0};
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(dotProduct(field("embedding"), sampleVector).as("dotProduct"))
        .execute()
        .get();

EUCLIDEAN_DISTANCE

Syntaxe :

euclidean_distance(x: VECTOR, y: VECTOR) -> FLOAT64

Description :

Calcule la distance euclidienne entre x et y.

Node.js
const sampleVector = [0.0, 1, 2, 3, 4, 5];
const result = await db.pipeline()
  .collection("books")
  .select(
    field("embedding").euclideanDistance(sampleVector).as("euclideanDistance")
  )
  .execute();

Web

const sampleVector = [0.0, 1, 2, 3, 4, 5];
const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("embedding").euclideanDistance(sampleVector).as("euclideanDistance")
  )
);
Swift
let sampleVector = [0.0, 1, 2, 3, 4, 5]
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("embedding").euclideanDistance(sampleVector).as("euclideanDistance")
  ])
  .execute()

Kotlin

val sampleVector = doubleArrayOf(0.0, 1.0, 2.0, 3.0, 4.0, 5.0)
val result = db.pipeline()
    .collection("books")
    .select(
        field("embedding").euclideanDistance(sampleVector).alias("euclideanDistance")
    )
    .execute()

Java

double[] sampleVector = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0};
Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("embedding").euclideanDistance(sampleVector).alias("euclideanDistance")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field
from google.cloud.firestore_v1.vector import Vector

sample_vector = Vector([0.0, 1.0, 2.0, 3.0, 4.0, 5.0])
result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("embedding")
        .euclidean_distance(sample_vector)
        .as_("euclideanDistance")
    )
    .execute()
)
Java
double[] sampleVector = new double[] {0.0, 1.0, 2.0, 3.0, 4.0, 5.0};
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(euclideanDistance(field("embedding"), sampleVector).as("euclideanDistance"))
        .execute()
        .get();

MANHATTAN_DISTANCE

Syntaxe :

manhattan_distance(x: VECTOR, y: VECTOR) -> FLOAT64

Description :

Calcule la distance de Manhattan entre x et y.

VECTOR_LENGTH

Syntaxe :

vector_length(vector: VECTOR) -> INT64

Description :

Renvoie le nombre d'éléments dans un VECTOR.

Node.js
const result = await db.pipeline()
  .collection("books")
  .select(
    field("embedding").vectorLength().as("vectorLength")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("embedding").vectorLength().as("vectorLength")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("embedding").vectorLength().as("vectorLength")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(
        field("embedding").vectorLength().alias("vectorLength")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("embedding").vectorLength().alias("vectorLength")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("embedding").vector_length().as_("vectorLength"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(vectorLength(field("embedding")).as("vectorLength"))
        .execute()
        .get();