Fonctions de chaîne

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 -1 si search est introuvable.
  • Si value est une valeur STRING, le résultat est mesuré en points de code Unicode. S'il s'agit d'une valeur BYTES, elle est mesurée en octets.
  • Si search est une valeur STRING ou BYTES vide, le résultat est 0.

Exemples :

valeur search string_index_of(value, search)
"hello world" "o" 4
"hello world" "l" 2
"hello world" "z" -1
"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 input est une valeur STRING, position et length sont mesurés en points de code Unicode. S'il s'agit d'une valeur BYTES, elles sont mesurées en octets.

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

  • Si position est négatif, la position est prise à partir de la fin de l'entrée. Si la valeur négative de position est supérieure à la taille de l'entrée, la position est définie sur zéro. length ne 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.

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

Exemples :

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

STRING_REPLACE_ALL

Syntaxe :

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

Description :

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

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

Exemples :

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

STRING_REPLACE_ONE

Syntaxe :

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

Description :

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

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

Exemples :

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

TRIM

Syntaxe :

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

Description :

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

  • Si aucun values_to_trim n'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_trim n'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_trim n'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 STRING et un tableau de BYTES pour les valeurs BYTES.

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

Exemples :

Lorsque delimiter n'est pas fourni :

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

Lorsque delimiter est fourni :

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