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 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 NULL
|
FIRST
|
Renvoie la valeur expression du premier document.
|
LAST
|
Renvoie la valeur expression du 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é à 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();
Accéder
// Total number of books in the collection countAll, err := client.Pipeline().Collection("books"). Aggregate(firestore.Accumulators(firestore.CountAll().As("count"))). Execute(ctx).Results().GetAll() if err != nil { fmt.Fprintf(w, "GetAll failed: %v", err) return err } // Number of books with nonnull `ratings` field countField, err := client.Pipeline(). Collection("books"). Aggregate(firestore.Accumulators(firestore.Count("ratings").As("count"))). Execute(ctx).Results().GetAll() if err != nil { fmt.Fprintf(w, "GetAll failed: %v", err) return err }
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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Aggregate(firestore.Accumulators( firestore.CountIf(firestore.FieldOf("rating").GreaterThan(4)).As("filteredCount"), )). Execute(ctx)
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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Aggregate(firestore.Accumulators( firestore.CountDistinct("author").As("unique_authors"), )). Execute(ctx)
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 sera du même type que le type d'entrée le plus large, sauf dans les cas suivants :
- Un
INTEGERsera converti enDOUBLEs'il ne peut pas être représenté en tant queINTEGER.
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();
Accéder
snapshot := client.Pipeline(). Collection("cities"). Aggregate(firestore.Accumulators( firestore.Sum("population").As("totalPopulation"), )). Execute(ctx)
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
INTEGERsera converti enDOUBLEs'il ne peut pas être représenté en tant queINTEGER.
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();
Accéder
snapshot := client.Pipeline(). Collection("cities"). Aggregate(firestore.Accumulators( firestore.Average("population").As("averagePopulation"), )). Execute(ctx)
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 minimales équivalentes, 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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Aggregate(firestore.Accumulators( firestore.Minimum("price").As("minimumPrice"), )). Execute(ctx)
MAXIMUM
Syntaxe :
maximum(expression: ANY) -> ANY
Description :
Renvoie la valeur maximale 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 maximales équivalentes, 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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Aggregate(firestore.Accumulators( firestore.Maximum("price").As("maximumPrice"), )). Execute(ctx)
PREMIER CLIC
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'elles sont évaluées sur chaque document.
Si l'expression renvoie 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 renvoie 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
NULLsi l'un des paramètres d'entrée estNULL. - Prend la valeur
NaNsi l'un des arguments estNaN. - Génère une erreur en cas de dépassement de capacité par le haut ou par le bas.
Cloud Firestore effectue un élargissement de type numérique en fonction de la hiérarchie suivante : INT32 < INT64 < FLOAT64 < DECIMAL128. Lorsqu'une fonction arithmétique accepte plusieurs arguments numériques de types différents (par exemple, add(5.0D, 6L)), les types plus étroits sont implicitement convertis en types les plus larges présents parmi les opérandes. Dans l'exemple précédent, 6L est élargi à 6.0D, ce qui entraîne le renvoi d'un type FLOAT64 par l'expression.
Une coercition implicite de INT64 -> FLOAT64 peut entraîner une perte de précision, car la valeur forcée peut perdre ses bits les moins significatifs. La valeur obtenue sera une version arrondie de la valeur entière d'origine, en utilisant le mode d'arrondi au plus proche IEEE 754.
| 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 valeur plancher d'un number
|
ROUND
|
Arrondit un number à places décimales.
|
TRUNC
|
Tronque une valeur 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 exponent
|
LN
|
Renvoie le logarithme naturel d'un number
|
LOG
|
Renvoie le logarithme d'un number.
|
LOG10
|
Renvoie le logarithme d'un number en base 10
|
RAND
|
Renvoie un nombre à virgule flottante pseudo-aléatoire |
ABS
Syntaxe :
abs[N <: INT32 | INT64 | FLOAT64 | DECIMAL128](number: N) -> N
Description :
Renvoie la valeur absolue d'un number.
- Génère une erreur lorsque la fonction dépasse une valeur
INT32ouINT64.
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 | DECIMAL128](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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.Add(firestore.FieldOf("soldBooks"), firestore.FieldOf("unsoldBooks")).As("totalBooks"), )). Execute(ctx)
SUBTRACT
Syntaxe :
subtract[N <: INT32 | INT64 | FLOAT64 | DECIMAL128](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();
Accéder
storeCredit := 7 snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.Subtract(firestore.FieldOf("price"), storeCredit).As("totalCost"), )). Execute(ctx)
MULTIPLY
Syntaxe :
multiply[N <: INT32 | INT64 | FLOAT64 | DECIMAL128](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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.Multiply(firestore.FieldOf("price"), firestore.FieldOf("soldBooks")).As("revenue"), )). Execute(ctx)
DIVIDE
Syntaxe :
divide[N <: INT32 | INT64 | FLOAT64 | DECIMAL128](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 |
| 0.0 | 0,0 | NaN |
+inf |
+inf |
NaN |
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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.Divide(firestore.FieldOf("ratings"), firestore.FieldOf("soldBooks")).As("reviewRate"), )). Execute(ctx)
MOD
Syntaxe :
mod[N <: INT32 | INT64 | FLOAT64 | DECIMAL128](x: N, y: N) -> N
Description :
Renvoie le reste de x / y.
- Renvoie une
errorlorsqueyest égal à zéro pour les types d'entiers (INT64). - Renvoie
NaNlorsqueyest égal à zéro pour les types à virgule flottante (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();
Accéder
displayCapacity := 1000 snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.Mod(firestore.FieldOf("unsoldBooks"), displayCapacity).As("warehousedBooks"), )). Execute(ctx)
CEIL
Syntaxe :
ceil[N <: INT32 | INT64 | FLOAT64 | DECIMAL128](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 |
NaN |
NaN |
+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();
Accéder
booksPerShelf := 100 snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.Ceil(firestore.Divide(firestore.FieldOf("unsoldBooks"), booksPerShelf)).As("requiredShelves"), )). Execute(ctx)
FLOOR
Syntaxe :
floor[N <: INT32 | INT64 | FLOAT64 | DECIMAL128](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 |
NaN |
NaN |
+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();
Accéder
snapshot := client.Pipeline(). Collection("books"). AddFields(firestore.Selectables( firestore.Floor(firestore.Divide(firestore.FieldOf("wordCount"), firestore.FieldOf("pages"))).As("wordsPerPage"), )). Execute(ctx)
ARRONDI
Syntaxe :
round[N <: INT32 | INT64 | FLOAT64 | DECIMAL128](number: N) -> N
round[N <: INT32 | INT64 | FLOAT64 | DECIMAL128](number: N, places: INT64) -> N
Description :
Arrondit places chiffres d'un number. Arrondit les chiffres à droite du séparateur décimal si places est positif, et à gauche du séparateur décimal s'il est négatif.
- Si seul
numberest fourni, arrondit à la valeur entière la plus proche. - Arrondit à la valeur la plus éloignée de zéro dans les cas à mi-chemin.
- Une erreur
errorest générée si l'arrondi avec une valeurplacesné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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.Round(firestore.Multiply(firestore.FieldOf("soldBooks"), firestore.FieldOf("price"))).As("partialRevenue"), )). Aggregate(firestore.Accumulators( firestore.Sum("partialRevenue").As("totalRevenue"), )). Execute(ctx)
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 du séparateur décimal si places est positif, et à gauche du séparateur décimal s'il est négatif.
- Si seul
numberest fourni, tronque à la valeur entière la plus proche de zéro. - Une erreur
errorest générée si la troncature entraîne un dépassement de capacité.
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 <= 0etexponentsont négatifs.Pour tout
exponent(y comprisNaN),pow(1, exponent)est égal à 1.Pour tout
base(y comprisNaN),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 |
NaN |
0 | 1.0 |
| 1 | NaN |
1.0 |
NaN |
Numeric |
NaN |
Numeric |
NaN |
NaN |
| -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();
Accéder
googleplexLat := 37.4221 googleplexLng := -122.0853 snapshot := client.Pipeline(). Collection("cities"). AddFields(firestore.Selectables( firestore.Pow(firestore.Multiply(firestore.Subtract(firestore.FieldOf("lat"), googleplexLat), 111), 2).As("latitudeDifference"), firestore.Pow(firestore.Multiply(firestore.Subtract(firestore.FieldOf("lng"), googleplexLng), 111), 2).As("longitudeDifference"), )). Select(firestore.Fields( firestore.Sqrt(firestore.Add(firestore.FieldOf("latitudeDifference"), firestore.FieldOf("longitudeDifference"))). // Inaccurate for large distances or close to poles As("approximateDistanceToGoogle"), )). Execute(ctx)
SQRT
Syntaxe :
sqrt[N <: FLOAT64 | DECIMAL128](number: N) -> N
Description :
Renvoie la racine carrée d'un number.
- Génère une
errorsinumberest 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();
Accéder
googleplexLat := 37.4221 googleplexLng := -122.0853 snapshot := client.Pipeline(). Collection("cities"). AddFields(firestore.Selectables( firestore.Pow(firestore.Multiply(firestore.Subtract(firestore.FieldOf("lat"), googleplexLat), 111), 2).As("latitudeDifference"), firestore.Pow(firestore.Multiply(firestore.Subtract(firestore.FieldOf("lng"), googleplexLng), 111), 2).As("longitudeDifference"), )). Select(firestore.Fields( firestore.Sqrt(firestore.Add(firestore.FieldOf("latitudeDifference"), firestore.FieldOf("longitudeDifference"))). // Inaccurate for large distances or close to poles As("approximateDistanceToGoogle"), )). Execute(ctx)
EXP
Syntaxe :
exp(exponent: FLOAT64) -> FLOAT64
Description :
Renvoie la valeur du nombre d'Euler élevé à la puissance exponent, également appelée fonction exponentielle naturelle.
Exemples :
| exposant | exp(exponent) |
|---|---|
| 0,0 | 1.0 |
| 10 | e^10 (FLOAT64) |
NaN |
NaN |
+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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.Exp(firestore.FieldOf("rating")).As("expRating"), )). Execute(ctx)
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 |
NaN |
NaN |
-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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.Ln(firestore.FieldOf("rating")).As("lnRating"), )). Execute(ctx)
LOG
Syntaxe :
log(number: FLOAT64, base: FLOAT64) -> FLOAT64
log(number: FLOAT64) -> FLOAT64
Description :
Renvoie le logarithme d'un number en base base.
- Si seul
numberest fourni, renvoie le logarithme denumberàbase(synonyme deln(number)).
Exemples :
| nombre | base | log(number, base) |
|---|---|---|
| 100 | 10 | 2.0 |
NaN |
Numeric |
NaN |
Numeric |
NaN |
NaN |
-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 d'un number en base 10.
Exemples :
| nombre | log10(number) |
|---|---|
| 100 | 2.0 |
NaN |
NaN |
-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 n premiers éléments 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 à chaque élément.
|
MAXIMUM
|
Renvoie la valeur maximale dans un ARRAY.
|
MAXIMUM_N
|
Renvoie les n plus grandes valeurs d'un ARRAY.
|
MINIMUM
|
Renvoie la valeur minimale dans un ARRAY.
|
MINIMUM_N
|
Renvoie les n plus petites valeurs d'un ARRAY.
|
SUM
|
Renvoie la somme de toutes les valeurs NUMERIC d'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
NULLdans le tableau obtenu.
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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.ArrayConcat(firestore.FieldOf("genre"), firestore.FieldOf("subGenre")).As("allGenres"), )). Execute(ctx)
ARRAY_CONTAINS
Syntaxe :
array_contains(array: ARRAY, value: ANY) -> BOOLEAN
Description :
Renvoie TRUE si value est trouvé dans array, et FALSE dans le cas contraire.
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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.ArrayContains(firestore.FieldOf("genre"), "mystery").As("isMystery"), )). Execute(ctx)
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 sinon.
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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.ArrayContainsAll(firestore.FieldOf("genre"), []string{"fantasy", "adventure"}).As("isFantasyAdventure"), )). Execute(ctx)
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, et FALSE sinon.
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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.ArrayContainsAny(firestore.FieldOf("genre"), []string{"fantasy", "nonfiction"}).As("isMysteryOrFantasy"), )). Execute(ctx)
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 contenant uniquement les éléments qui répondent au prédicat.
- Pour chaque élément de
array,predicateest évalué. Si elle renvoietrue, l'élément est inclus dans le résultat. Sinon (si elle renvoiefalseounull), il est omis. - Si
predicaterenvoie une valeur non booléenne ou non nulle, la fonction renvoie une erreur.
Exemples :
| tableau | predicate | 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 index basé sur 0 dans array.
- Si
indexest négatif, l'accès aux éléments se fait à partir de la fin du tableau, où-1est le dernier élément. - Si
arrayn'est pas de typeARRAYet n'est pasnull, renvoie une erreur. - Si
indexest hors limites, la fonction renvoie une valeur absente. - Si
indexn'est pas de typeINT64, 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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.ArrayLength(firestore.FieldOf("genre")).As("genreCount"), )). Execute(ctx)
ARRAY_REVERSE
Syntaxe :
array_reverse(array: ARRAY) -> ARRAY
Description :
Inverse la valeur array donnée.
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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.ArrayReverse(firestore.FieldOf("genre")).As("reversedGenres"), )). Execute(ctx)
ARRAY_FIRST
Syntaxe :
array_first(array: ARRAY) -> ANY
Description :
Renvoie le premier élément de array. Cela équivaut à array_get(array, 0).
- Si
arrayest 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
nest négatif, renvoie une erreur.
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 en 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
arrayest 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
nest négatif, renvoie une erreur.
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 à partir de l'index offset basé sur zéro, et incluant les éléments length.
- Si
offsetest négatif, il indique la position de départ à partir de la fin du tableau,-1étant le dernier élément. - Si
lengthest supérieur au nombre d'éléments restants dans le tableau aprèsoffset, le résultat s'étend jusqu'à la fin du tableau. lengthne 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, ce qui renvoie un nouveau tableau avec les éléments transformés. Le tableau de sortie aura toujours la même taille que le tableau d'entrée.
expressionpeut être une fonction unaireelement -> resultou une fonction binaire(element, index) -> result.- Si
expressionest unaire, il est appelé avec chaque élément dearray. - Si
expressionest binaire, il est appelé avec chaque élément dearrayet son index correspondant basé sur zéro.
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
NULLsont ignorées lors de la comparaison. - Si
arrayest vide ou ne contient que des valeursNULL, renvoieNULL.
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 dans array par ordre décroissant.
- Les valeurs
NULLsont ignorées. - Si
nest négatif, renvoie une erreur.
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
NULLsont ignorées lors de la comparaison. - Si
arrayest vide ou ne contient que des valeursNULL, renvoieNULL.
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
NULLsont ignorées. - Si
nest négatif, renvoie une erreur.
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 d'un ARRAY.
- Les valeurs non numériques du tableau sont ignorées.
- Si une valeur numérique du tableau est
NaN, la fonction renvoieNaN. - Le type renvoyé est déterminé par le type numérique le plus large du tableau :
INT64<FLOAT64. - Si un dépassement 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, le dépassement de capacité entraînera +/- l'infini.
- 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 de données STRING ou BYTES.
- Tous les éléments de
array,delimiteretnull_textdoivent être du même type : ils doivent tous être desSTRINGou desBYTES. - Si
null_textest fourni, toutes les valeursNULLdearraysont remplacées parnull_text. - Si
null_textn'est pas fourni, les valeursNULLdearraysont 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" | "a,MISSING,c" |
| [b'a', null, b'c'] | b',' | b'NULL' | b'a,NULL,c' |
| [null, "b", null] | "," | "MISSING" | "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, et FALSE sinon.
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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.Equal(firestore.FieldOf("rating"), 5).As("hasPerfectRating"), )). Execute(ctx)
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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.GreaterThan(firestore.FieldOf("rating"), 4).As("hasHighRating"), )). Execute(ctx)
GREATER_THAN_OR_EQUAL
Syntaxe :
greater_than_or_equal(x: ANY, y: ANY) -> BOOLEAN
Description :
Renvoie TRUE si la valeur de x est supérieure ou égale à 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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.GreaterThanOrEqual(firestore.FieldOf("published"), 1900).As("publishedIn20thCentury"), )). Execute(ctx)
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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.LessThan(firestore.FieldOf("published"), 1923).As("isPublicDomainProbably"), )). Execute(ctx)
LESS_THAN_OR_EQUAL
Syntaxe :
less_than_or_equal(x: ANY, y: ANY) -> BOOLEAN
Description :
Renvoie TRUE si la valeur de x est inférieure ou égale à y, et 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 | 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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.LessThanOrEqual(firestore.FieldOf("rating"), 2).As("hasBadRating"), )). Execute(ctx)
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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.NotEqual(firestore.FieldOf("title"), "1984").As("not1984"), )). Execute(ctx)
PPR
Syntaxe :
cmp(x: ANY, y: ANY) -> Int64
Description :
Compare x et y, et renvoie :
1Lsi la valeur dexest supérieure ày.-1Lsi la valeur dexest inférieure ày.0Lsinon.
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 classé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 absente.
|
IS_ABSENT
|
Renvoie TRUE si la valeur est une valeur absente.
|
IF_ABSENT
|
Remplace la valeur par une expression si elle est absente |
IS_ERROR
|
Intercepte 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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.FieldExists(firestore.FieldOf("rating")).As("hasRating"), )). Execute(ctx)
IS_ABSENT
Syntaxe :
is_absent(value: ANY) -> BOOLEAN
Description :
Renvoie TRUE si value est la valeur absente, et FALSE sinon. Les valeurs absentes sont des valeurs manquantes dans l'entrée, par exemple 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. L'élément 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 agit comme un "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 de l'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 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 (basé sur zéro) de la tranche. Si elle est négative, elle correspond à un décalage par rapport à la fin de la référence.length: nombre de segments à inclure dans la tranche.
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 une opération logique AND. |
OR
|
Effectue un OU logique |
XOR
|
Effectue une opération logique XOR |
NOT
|
Effectue un NOT logique |
NOR
|
Effectue un NON-OU logique |
CONDITIONAL
|
Évalue les branches 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 l'opérateur logique AND de deux valeurs booléennes ou plus.
Renvoie NULL si le résultat ne peut pas être dérivé, car l'une des valeurs donné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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.And( firestore.GreaterThan(firestore.FieldOf("rating"), 4), firestore.LessThan(firestore.FieldOf("price"), 10), ).As("under10Recommendation"), )). Execute(ctx)
OU
Syntaxe :
or(x: BOOLEAN...) -> BOOLEAN
Description :
Renvoie l'opérateur logique OR de deux valeurs booléennes ou plus.
Renvoie NULL si le résultat ne peut pas être dérivé, car l'une des valeurs donné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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.Or( firestore.Equal(firestore.FieldOf("genre"), "Fantasy"), firestore.ArrayContains(firestore.FieldOf("tags"), "adventure"), ).As("matchesSearchFilters"), )). Execute(ctx)
XOR
Syntaxe :
xor(x: BOOLEAN...) -> BOOLEAN
Description :
Renvoie la valeur logique XOR de plusieurs valeurs booléennes.
Renvoie NULL si l'une des valeurs données 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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.Xor( firestore.ArrayContains(firestore.FieldOf("tags"), "magic"), firestore.ArrayContains(firestore.FieldOf("tags"), "nonfiction"), ).As("matchesSearchFilters"), )). Execute(ctx)
NOR
Syntaxe :
nor(x: BOOLEAN...) -> BOOLEAN
Description :
Renvoie la valeur logique NOR de deux valeurs booléennes ou plus.
Renvoie NULL si le résultat ne peut pas être dérivé, car l'une des valeurs donné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 valeur logique NOT 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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.Not(firestore.ArrayContains(firestore.FieldOf("tags"), "nonfiction")).As("isFiction"), )). Execute(ctx)
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 FALSE, NULL ou une valeur 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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.ArrayConcat( firestore.FieldOf("tags"), firestore.Conditional( firestore.GreaterThan(firestore.FieldOf("pages"), 100), firestore.ConstantOf("longRead"), firestore.ConstantOf("shortRead"), ), ).As("extendedTags"), )). Execute(ctx)
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'est évaluée à TRUE.
Pour fournir une valeur default, transmettez-la en tant qu'argument final 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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.EqualAny(firestore.FieldOf("genre"), []string{"Science Fiction", "Psychological Thriller"}).As("matchesGenreFilters"), )). Execute(ctx)
NOT_EQUAL_ANY
Syntaxe :
not_equal_any(value: ANY, search_space: ARRAY) -> BOOLEAN
Description :
Renvoie TRUE si value ne se trouve 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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.NotEqualAny(firestore.FieldOf("author"), []string{"George Orwell", "F. Scott Fitzgerald"}).As("byExcludedAuthors"), )). Execute(ctx)
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 autres que NULL et ABSENT, NULL est renvoyé.
S'il existe plusieurs valeurs maximales équivalentes, 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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.LogicalMaximum(firestore.FieldOf("rating"), 1).As("flooredRating"), )). Execute(ctx)
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 autres que NULL et ABSENT, NULL est renvoyé.
S'il existe plusieurs valeurs minimales équivalentes, 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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.LogicalMinimum(firestore.FieldOf("rating"), 5).As("cappedRating"), )). Execute(ctx)
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 en fonction d'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'un mappage. |
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'un mappage pour une clé spécifiée. Renvoie une valeur ABSENT si key n'existe pas dans le mappage 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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.MapGet(firestore.FieldOf("awards"), "pulitzer").As("hasPulitzerAward"), )). Execute(ctx)
MAP_SET
Syntaxe :
map_set(map: MAP, key: STRING, value: ANY, ...) -> MAP
Description :
Renvoie une copie de la valeur map avec son contenu mis à jour par une série de paires clé/valeur.
Si la valeur donnée correspond à une valeur 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 d'au moins deux cartes. Si plusieurs mappages ont des valeurs en conflit, la dernière valeur est utilisée.
CURRENT_CONTEXT
Syntaxe :
current_context() -> MAP
Renvoie une carte composée de tous les champs disponibles dans le 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 la valeur 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'un mappage 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 un STRING correspond à un modèle.
|
REGEX_CONTAINS
|
Renvoie TRUE si une valeur correspond partiellement ou totalement à une expression régulière.
|
REGEX_FIND
|
Renvoie la première sous-chaîne qui correspond à une expression régulière, ou NULL s'il n'y a pas de correspondance.
|
REGEX_FIND_ALL
|
Renvoie un tableau de toutes les sous-chaînes qui correspondent à une expression régulière, ou un tableau vide s'il n'y a aucune correspondance. |
REGEX_MATCH
|
Renvoie TRUE si une partie d'une valeur correspond à une expression régulière.
|
STRING_CONCAT
|
Concatène plusieurs STRING en un seul STRING
|
STRING_CONTAINS
|
Renvoie TRUE si une valeur contient un STRING.
|
STRING_INDEX_OF
|
Renvoie l'index en 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
|
Récupère 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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.ByteLength(firestore.FieldOf("title")).As("titleByteLength"), )). Execute(ctx)
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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.CharLength(firestore.FieldOf("title")).As("titleCharLength"), )). Execute(ctx)
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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.StartsWith(firestore.FieldOf("title"), "The").As("needsSpecialAlphabeticalSort"), )). Execute(ctx)
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();
Accéder
snapshot := client.Pipeline(). Collection("inventory/devices/laptops"). Select(firestore.Fields( firestore.EndsWith(firestore.FieldOf("name"), "16 inch").As("`Laptops16in`"), )). Execute(ctx)
J'AIME
Syntaxe :
like(value: STRING, pattern: STRING) -> BOOLEAN
Description :
Renvoie TRUE si value correspond à pattern.
Exemples :
| valeur | modèle | like(value, pattern) |
|---|---|---|
| "Firestore" | "Feu%" | 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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.Like(firestore.FieldOf("genre"), "%Fiction").As("anyFiction"), )). Execute(ctx)
REGEX_CONTAINS
Syntaxe :
regex_contains(value: STRING, regexp: STRING | REGEX) -> BOOLEAN
Description :
Renvoie TRUE si une partie de value correspond à regexp. Si regexp n'est pas une expression régulière valide, cette fonction renvoie error.
L'argument regexp peut également être une valeur REGEX créée à l'aide de regex("pattern", "options"). Ce format vous permet de fournir des options d'expression régulière avec le modèle. Les options acceptées sont les suivantes :
i: correspondance non sensible à la casse.m: mode multiligne (^et$correspondent au début ou à la fin des lignes).s: mode Dotall (.correspond aux sauts de ligne).
Si regexp est un STRING, aucune option n'est appliquée, à l'exception de celles intégrées au modèle lui-même (par exemple, (?i)).
Les expressions régulières suivent la syntaxe de la bibliothèque re2.
Exemples :
| valeur | Expression régulière | regex_contains(value, regexp) |
|---|---|---|
| "Firestore" | "Feu" | true |
| "Firestore" | "store$" | true |
| "Firestore" | "data" | faux |
| "Firestore" | regex("fire", "i") |
true |
| "Firestore" | regex("FIRE", "") |
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();
Accéder
snapshot := client.Pipeline(). Collection("documents"). Select(firestore.Fields( firestore.RegexContains(firestore.FieldOf("title"), "Firestore (Enterprise|Standard)").As("isFirestoreRelated"), )). Execute(ctx)
REGEX_FIND
Syntaxe :
regex_find(value: STRING, regexp: STRING | REGEX) -> STRING
Description :
Renvoie la première sous-chaîne de value qui correspond à regexp, ou NULL s'il n'y a pas de correspondance. Si regexp n'est pas une expression régulière valide, cette fonction renvoie une erreur error.
L'argument regexp peut également être une valeur REGEX créée à l'aide de regex("pattern", "options"). Ce format vous permet de fournir des options d'expression régulière avec le modèle. Les options acceptées sont les suivantes :
i: correspondance non sensible à la casse.m: mode multiligne (^et$correspondent au début ou à la fin des lignes).s: mode Dotall (.correspond aux sauts de ligne).
Si regexp est un STRING, aucune option n'est appliquée, à l'exception de celles intégrées au modèle lui-même (par exemple, (?i)).
Les expressions régulières suivent la syntaxe de la bibliothèque re2.
Exemples :
| valeur | Expression régulière | regex_find(value, regexp) |
|---|---|---|
| "Sometext MATCH" | "SomeText" | "Sometext" |
| "Sometext MATCH" | regex("match", "i") |
"MATCH" |
| "Sometext MATCH" | regex("(match)", "i") |
"MATCH" |
| "Sometext match" | regex("MATCH", "") |
null |
REGEX_FIND_ALL
Syntaxe :
regex_find_all(value: STRING, regexp: STRING | REGEX) -> ARRAY<STRING>
Description :
Renvoie un tableau de toutes les sous-chaînes de value qui correspondent à regexp, ou un tableau vide s'il n'y a aucune correspondance. Si regexp n'est pas une expression régulière valide, cette fonction renvoie une erreur error.
L'argument regexp peut également être une valeur REGEX créée à l'aide de regex("pattern", "options"). Ce format vous permet de fournir des options d'expression régulière avec le modèle. Les options acceptées sont les suivantes :
i: correspondance non sensible à la casse.m: mode multiligne (^et$correspondent au début ou à la fin des lignes).s: mode Dotall (.correspond aux sauts de ligne).
Si regexp est un STRING, aucune option n'est appliquée, à l'exception de celles intégrées au modèle lui-même (par exemple, (?i)).
Les expressions régulières suivent la syntaxe de la bibliothèque re2.
Exemples :
| valeur | Expression régulière | regex_find_all(value, regexp) |
|---|---|---|
| "one two three two" | "un" | ["one"] |
| "one TWO three Two" | regex("two", "i") |
["TWO", "Two"] |
| "one two three two" | regex("TWO", "") |
[] |
REGEX_MATCH
Syntaxe :
regex_match(value: STRING, regexp: STRING | REGEX) -> BOOLEAN
Description :
Renvoie TRUE si value correspond entièrement à regexp. Si regexp n'est pas une expression régulière valide, cette fonction renvoie une erreur error.
L'argument regexp peut également être une valeur REGEX créée à l'aide de regex("pattern", "options"). Ce format vous permet de fournir des options d'expression régulière avec le modèle. Les options acceptées sont les suivantes :
i: correspondance non sensible à la casse.m: mode multiligne (^et$correspondent au début ou à la fin des lignes).s: mode Dotall (.correspond aux sauts de ligne).
Si regexp est un STRING, aucune option n'est appliquée, à l'exception de celles intégrées au modèle lui-même (par exemple, (?i)).
Les expressions régulières suivent la syntaxe de la bibliothèque re2.
Exemples :
| valeur | Expression régulière | regex_match(value, regexp) |
|---|---|---|
| "Firestore" | "F.*store" | true |
| "Firestore" | "Feu" | faux |
| "Firestore" | "^F.*e$" | true |
| "FiReStOrE" | regex("firestore", "i") |
true |
| "Firestore" | regex("firestore", "") |
faux |
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();
Accéder
snapshot := client.Pipeline(). Collection("documents"). Select(firestore.Fields( firestore.RegexMatch(firestore.FieldOf("title"), "Firestore (Enterprise|Standard)").As("isFirestoreExactly"), )). Execute(ctx)
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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.StringConcat(firestore.FieldOf("title"), " by ", firestore.FieldOf("author")).As("fullyQualifiedTitle"), )). Execute(ctx)
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();
Accéder
snapshot := client.Pipeline(). Collection("articles"). Select(firestore.Fields( firestore.StringContains(firestore.FieldOf("body"), "Firestore").As("isFirestoreRelated"), )). Execute(ctx)
STRING_INDEX_OF
Syntaxe :
string_index_of[T <: STRING | BYTES](value: T, search: T) -> INT64
Description :
Renvoie l'index en base 0 de la première occurrence de search dans value.
- Renvoie
-1sisearchest introuvable. - Si
valueest une valeurSTRING, le résultat est mesuré en points de code Unicode. S'il s'agit d'une valeurBYTES, elle est mesurée en octets. - Si
searchest une valeurSTRINGouBYTESvide, le résultat est0.
Exemples :
| valeur | search | string_index_of(value, search) |
|---|---|---|
| "hello world" | "o" | 4 |
| "hello world" | "l" | 2 |
| "hello world" | "z" | -1 |
| "banana" | "ana" | 1 |
| "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" | "ABC" |
| b"a1c" | "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();
Accéder
snapshot := client.Pipeline(). Collection("authors"). Select(firestore.Fields( firestore.ToUpper(firestore.FieldOf("name")).As("uppercaseName"), )). Execute(ctx)
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 UTF-8 en majuscule, il est transmis sans modification.
Exemples :
| valeur | to_lower(value) |
|---|---|
| "ABC" | "abc" |
| "AbC" | "abc" |
| "A1C" | "a1c" |
| "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();
Accéder
snapshot := client.Pipeline(). Collection("authors"). Select(firestore.Fields( firestore.Equal(firestore.ToLower(firestore.FieldOf("genre")), "fantasy").As("isFantasy"), )). Execute(ctx)
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 basé sur 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
inputest une valeurSTRING,positionetlengthsont mesurés en points de code Unicode. S'il s'agit d'une valeurBYTES, elles sont mesurées en octets.Si la valeur de
positionest supérieure à la longueur deinput, une sous-chaîne vide est renvoyée. Si la valeur depositionpluslengthest supérieure à la longueur deinput, la sous-chaîne est tronquée à la fin deinput.Si
positionest négatif, la position est prise à partir de la fin de l'entrée. Si la valeur négative depositionest supérieure à la taille de l'entrée, la position est définie sur zéro.lengthne doit pas être négatif.
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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Where(firestore.StartsWith(firestore.FieldOf("title"), "The ")). Select(firestore.Fields( firestore.Substring(firestore.FieldOf("title"), firestore.ConstantOf(4), firestore.FieldOf("title").CharLength()).As("titleWithoutLeadingThe"), )). Execute(ctx)
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 de type 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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.Reverse(firestore.FieldOf("name")).As("reversedName"), )). Execute(ctx)
STRING_REPEAT
Syntaxe :
string_repeat[T <: STRING | BYTES](input: T, repetitions: INT64) -> T
Description :
Renvoie la valeur input répétée repetitions fois.
repetitionsdoit être un entier non négatif.- Si
repetitionsest0, renvoie une valeur vide du même type queinput. - 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 | "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
findest 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
findest 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 CHARS du début et de la fin de la valeur input fournie.
- Si aucun
values_to_trimn'est fourni, supprime les espaces blancs.
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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.Trim(firestore.FieldOf("name")).As("whitespaceTrimmedName"), )). Execute(ctx)
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 CHARS au début de la valeur value fournie.
- Si
to_trimn'est pas fourni, supprime les espaces blancs de début.
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 CHARS de la fin de l'élément value fourni.
- Si
to_trimn'est pas fourni, supprime les espaces blancs de fin.
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 :
Divise 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.La division sur un délimiteur vide produit un tableau de points de code Unicode pour les valeurs
STRINGet un tableau deBYTESpour les valeursBYTES.Une requête SPLIT sur une
STRINGvide renvoie unARRAYcontenant une seuleSTRINGvide.
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"] |
| "ABC" | b"" | [b"A", b"B", b"C"] |
| "foo" | b"C1" | erreur |
Fonctions de code temporel
| 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 le 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 à un TIMESTAMP.
|
TIMESTAMP_SUB
|
Soustrait un intervalle de temps d'une valeur TIMESTAMP.
|
TIMESTAMP_TO_UNIX_MICROS
|
Convertit une valeur TIMESTAMP en nombre de microsecondes écoulées depuis le 1970-01-01 00:00:00 UTC.
|
TIMESTAMP_TO_UNIX_MILLIS
|
Convertit une valeur TIMESTAMP en nombre de millisecondes écoulées depuis le 1970-01-01 00:00:00 UTC.
|
TIMESTAMP_TO_UNIX_SECONDS
|
Convertit une valeur 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 :
Récupère le code temporel au début de l'heure de la requête input (interprété comme le nombre de microsecondes depuis 1970-01-01 00:00:00 UTC).
Cette valeur est stable dans une requête et renvoie toujours la même valeur si elle est appelée plusieurs fois.
TIMESTAMP_TRUNC
Syntaxe :
timestamp_trunc(timestamp: TIMESTAMP | BSON_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 éléments suivants :
microsecondmillisecondsecondminutehourdayweekweek([weekday])monthquarteryearisoyear
Si l'argument timezone est fourni, la troncature sera basée sur les limites du calendrier du fuseau horaire donné (par exemple, la troncature du jour sera tronquée à 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 sous forme de chaîne d'un fuseau horaire de la base de données tz, par exemple America/New_York. Vous pouvez également utiliser un horodatage 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 le 1970-01-01 00:00:00 UTC) en TIMESTAMP. Génère une erreur error si input ne peut pas être converti en une valeur 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();
Accéder
snapshot := client.Pipeline(). Collection("documents"). Select(firestore.Fields( firestore.UnixMicrosToTimestamp(firestore.FieldOf("createdAtMicros")).As("createdAtString"), )). Execute(ctx)
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 erreur error si input ne peut pas être converti en une valeur 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();
Accéder
snapshot := client.Pipeline(). Collection("documents"). Select(firestore.Fields( firestore.UnixMillisToTimestamp(firestore.FieldOf("createdAtMillis")).As("createdAtString"), )). Execute(ctx)
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 erreur error si input ne peut pas être converti en une valeur 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();
Accéder
snapshot := client.Pipeline(). Collection("documents"). Select(firestore.Fields( firestore.UnixSecondsToTimestamp(firestore.FieldOf("createdAtSeconds")).As("createdAtString"), )). Execute(ctx)
TIMESTAMP_ADD
Syntaxe :
timestamp_add(timestamp: TIMESTAMP | BSON_TIMESTAMP, unit: STRING, amount: INT64) -> TIMESTAMP
Description :
Ajoute un amount de unit à partir de timestamp. L'argument amount peut être négatif, auquel cas il équivaut à TIMESTAMP_SUB.
L'argument unit doit être une chaîne et l'un des éléments suivants :
microsecondmillisecondsecondminutehourday
Génère une erreur si le code temporel obtenu ne se situe pas dans 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();
Accéder
snapshot := client.Pipeline(). Collection("documents"). Select(firestore.Fields( firestore.TimestampAdd(firestore.FieldOf("createdAt"), "day", 3653).As("expiresAt"), )). Execute(ctx)
TIMESTAMP_SUB
Syntaxe :
timestamp_sub(timestamp: TIMESTAMP | BSON_TIMESTAMP, unit: STRING, amount: INT64) -> TIMESTAMP
Description :
Soustrait un amount de unit de timestamp. L'argument amount peut être négatif, auquel cas il équivaut à TIMESTAMP_ADD.
L'argument unit doit être une chaîne et l'un des éléments suivants :
microsecondmillisecondsecondminutehourday
Génère une erreur si le code temporel obtenu ne se situe pas dans 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();
Accéder
snapshot := client.Pipeline(). Collection("documents"). Select(firestore.Fields( firestore.TimestampSubtract(firestore.FieldOf("expiresAt"), "day", 14).As("sendWarningTimestamp"), )). Execute(ctx)
TIMESTAMP_TO_UNIX_MICROS
Syntaxe :
timestamp_to_unix_micros(input: TIMESTAMP | BSON_TIMESTAMP) -> INT64
Description :
Convertit input en nombre de microsecondes é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 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();
Accéder
snapshot := client.Pipeline(). Collection("documents"). Select(firestore.Fields( firestore.TimestampToUnixMicros(firestore.FieldOf("dateString")).As("unixMicros"), )). Execute(ctx)
TIMESTAMP_TO_UNIX_MILLIS
Syntaxe :
timestamp_to_unix_millis(input: TIMESTAMP | BSON_TIMESTAMP) -> INT64
Description :
Convertit input en nombre de millisecondes 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 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();
Accéder
snapshot := client.Pipeline(). Collection("documents"). Select(firestore.Fields( firestore.TimestampToUnixMillis(firestore.FieldOf("dateString")).As("unixMillis"), )). Execute(ctx)
TIMESTAMP_TO_UNIX_SECONDS
Syntaxe :
timestamp_to_unix_seconds(input: TIMESTAMP | BSON_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();
Accéder
snapshot := client.Pipeline(). Collection("documents"). Select(firestore.Fields( firestore.TimestampToUnixSeconds(firestore.FieldOf("dateString")).As("unixSeconds"), )). Execute(ctx)
TIMESTAMP_DIFF
Syntaxe :
timestamp_diff(end: TIMESTAMP | BSON_TIMESTAMP, start: TIMESTAMP | BSON_TIMESTAMP, unit: STRING) -> INT64
Description :
Renvoie le nombre entier d'intervalles unit spécifiés entre deux TIMESTAMP.
- Renvoie une valeur négative si
endest antérieur àstart. - Tronque toute unité fractionnaire. Par exemple,
timestamp_diff("2021-01-01 00:00:01", "2021-01-01 00:00:00", "minute")affiche0.
L'argument unit doit être une chaîne et l'un des éléments suivants :
microsecondmillisecondsecondminutehourday
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 | BSON_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 éléments suivants :
microsecondmillisecondsecondminutehourdaydayofweek: renvoie une valeur comprise entre 1 (dimanche) et 7 (samedi).dayofyearweek: 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 leweekdayspécifié.monthquarteryearisoweek: 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 donné. 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 sous forme de chaîne d'un fuseau horaire de la base de données des 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" |
object_id "a7f2c9d18b3e4509f67c12d8" |
"object_id" |
1.2e9m |
"decimal128" |
regex "/pattern/i" |
"regex" |
bson_timestamp(1732754912, 500) |
"bson_timestamp" |
| 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();
Accéder
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.NotEqual(firestore.FieldOf("title"), "1984").As("not1984"), )). Execute(ctx)
IS_TYPE
Syntaxe :
is_type(input: ANY, type: STRING) -> BOOLEAN
Description :
Renvoie true si input correspond à l'type spécifié, sinon false.
Si la 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} | "carte" | 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 de 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();
Accéder
sampleVector := []float64{0.0, 1.0, 2.0, 3.0, 4.0, 5.0} snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.CosineDistance(firestore.FieldOf("embedding"), sampleVector).As("cosineDistance"), )). Execute(ctx)
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();
Accéder
sampleVector := []float64{0.0, 1.0, 2.0, 3.0, 4.0, 5.0} snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.DotProduct(firestore.FieldOf("embedding"), sampleVector).As("dotProduct"), )). Execute(ctx)
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();
Accéder
sampleVector := []float64{0.0, 1.0, 2.0, 3.0, 4.0, 5.0} snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.EuclideanDistance(firestore.FieldOf("embedding"), sampleVector).As("euclideanDistance"), )). Execute(ctx)
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();
Go
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.VectorLength(firestore.FieldOf("embedding")).As("vectorLength"), )). Execute(ctx)