Funkcje tablicowe

Funkcje tablicowe

Nazwa Opis
ARRAY Zwraca ARRAY zawierającą po jednym elemencie dla każdego argumentu wejściowego.
ARRAY_CONCAT Łączy wiele tablic w jedną ARRAY
ARRAY_CONTAINS Zwraca TRUE, jeśli dany ARRAY zawiera określoną wartość.
ARRAY_CONTAINS_ALL Zwraca TRUE, jeśli wszystkie wartości znajdują się w ARRAY.
ARRAY_CONTAINS_ANY Zwraca TRUE, jeśli którakolwiek z wartości występuje w ARRAY
ARRAY_GET Zwraca element o podanym indeksie w ARRAY
ARRAY_LENGTH Zwraca liczbę elementów w ARRAY
ARRAY_REVERSE Odwraca kolejność elementów w ARRAY.
SUM Zwraca sumę wszystkich wartości NUMERICARRAY.
JOIN Tworzy połączenie elementów w ARRAY jako wartość STRING.

ARRAY

Składnia:

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

Opis:

Tworzy tablicę z podanych elementów.

  • Jeśli argument nie istnieje, w wynikowej tablicy jest zastępowany wartością NULL.

Przykłady:

wartości 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

Składnia:

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

Opis:

Łączy co najmniej 2 tablice w jedną ARRAY.

Przykłady:

tablice, 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]

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("genre").arrayConcat([field("subGenre")]).as("allGenres"))
);
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()
)

ARRAY_CONTAINS

Składnia:

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

Opis:

Zwraca TRUE, jeśli w array znajdzie się value, a w przeciwnym razie zwraca FALSE.

Przykłady:

tablica wartość array_contains(array, value)
[1, 2, 3] 2 prawda
[[1, 2], [3]] [1, 2] prawda
[1, null] null prawda
„abc” DOWOLNA błąd

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

ARRAY_CONTAINS_ALL

Składnia:

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

Opis:

Zwraca wartość TRUE, jeśli wszystkie elementy search_values znajdują się w elemencie array, a w przeciwnym razie zwraca wartość FALSE.

Przykłady:

tablica szukane_wartości array_contains_all(array, search_values)
[1, 2, 3] [1, 2] prawda
[1, 2, 3] [1, 4] fałsz
[1, null] [wartość nieokreślona] prawda
[NaN] [NaN] prawda
[] [] prawda
[1, 2, 3] [] prawda

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

ARRAY_CONTAINS_ANY

Składnia:

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

Opis:

Zwraca TRUE, jeśli w array znajdzie się którykolwiek z elementów search_values, a w przeciwnym razie zwraca FALSE.

Przykłady:

tablica szukane_wartości array_contains_any(array, search_values)
[1, 2, 3] [4, 1] prawda
[1, 2, 3] [4, 5] fałsz
[1, 2, null] [wartość nieokreślona] prawda

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

ARRAY_GET

Składnia:

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

Opis:

Zwraca element na pozycji index (liczonej od zera) w array.

  • Jeśli index jest ujemne, elementy są dostępne od końca tablicy, gdzie -1 jest ostatnim elementem.
  • Jeśli array nie jest typu ARRAY, funkcja zwraca wartość pustą.
  • Jeśli index jest poza zakresem, funkcja zwraca wartość pustą.
  • Jeśli argument index nie jest typu INT64, funkcja zwraca błąd.

Przykłady:

tablica indeks array_get(array, index)
[1, 2, 3] 0 1
[1, 2, 3] -1 3
[1, 2, 3] 3 nieobecny
[1, 2, 3] -4 nieobecny
„abc” 0 nieobecny
null 0 nieobecny
Array „a” błąd
Array 2,0 błąd

ARRAY_LENGTH

Składnia:

array_length(array: ARRAY) -> INT64

Opis:

Zwraca liczbę elementów w array.

Przykłady:

tablica array_length(array)
[1, 2, 3] 3
[] 0
[1, 1, 1] 3
[1, null] 2

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

ARRAY_REVERSE

Składnia:

array_reverse(array: ARRAY) -> ARRAY

Opis:

Odwraca podany array.

Przykłady:

tablica array_reverse(array)
[1, 2, 3] [3, 2, 1]
["a", "b"] ["b", "a"]
[1, 2, 2, 3] [3, 2, 2, 1]

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

SUMA

Składnia:

sum(array: ARRAY) -> INT64 | FLOAT64

Opis:

Zwraca sumę wszystkich wartości NUMERICARRAY.

  • Wartości nienumeryczne w tablicy są ignorowane.
  • Jeśli jakakolwiek wartość liczbowa w tablicy to NaN, funkcja zwraca NaN.
  • Typ zwracany jest określany przez najszerszy typ liczbowy w tablicy: INT64 < FLOAT64.
  • Jeśli przed zsumowaniem jakiejkolwiek wartości zmiennoprzecinkowej wystąpi przepełnienie 64-bitowej liczby całkowitej, zwracany jest błąd. Jeśli wartości zmiennoprzecinkowe są sumowane, przepełnienie spowoduje powstanie +/- nieskończoności.
  • Jeśli tablica nie zawiera żadnych wartości liczbowych, funkcja zwraca NULL.

Przykłady:

tablica 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] błąd
[INT64.MAX_VALUE, 1, -1.0] błąd
[INT64.MAX_VALUE, 1.0] 9.223372036854776e+18

Join

Składnia:

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

Opis:

Zwraca połączenie elementów w array jako STRING. Wartość array może być typu STRING lub BYTES.

  • Wszystkie elementy w array, delimiternull_text muszą być tego samego typu. Muszą to być elementy STRING lub BYTES.
  • Jeśli podano parametr null_text, wszystkie wartości NULL w parametrze array zostaną zastąpione wartością null_text.
  • Jeśli nie podano właściwości null_text, wartości NULLarray są pomijane w wyniku.

Przykłady:

Gdy nie podano wartości null_text:

tablica separator 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'] „,” błąd
["a", "c"] b',' błąd
[b'a', b'c'] „,” błąd

Gdy podano wartość null_text:

tablica separator 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' błąd
[b'a', null] b',' „N” błąd