Semua fungsi

Agregat

Semua fungsi agregat dapat digunakan sebagai ekspresi tingkat teratas dalam tahap aggregate(...).

Nama Deskripsi
COUNT Menampilkan jumlah dokumen.
COUNT_IF Menampilkan jumlah dokumen yang ekspresinya menghasilkan nilai TRUE
COUNT_DISTINCT Menampilkan jumlah nilai unik yang bukan NULL
SUM Menampilkan hasil penjumlahan semua nilai NUMERIC
AVERAGE Menampilkan rata-rata semua nilai NUMERIC
MINIMUM Menampilkan nilai minimum yang bukan NULL
MAXIMUM Menampilkan nilai maksimum yang bukan NULL
FIRST Menampilkan nilai expression untuk dokumen pertama.
LAST Menampilkan nilai expression untuk dokumen terakhir.
ARRAY_AGG Menampilkan array dari semua nilai input.
ARRAY_AGG_DISTINCT Menampilkan array dari semua nilai input yang unik.

COUNT

Sintaksis:

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

Deskripsi:

Menampilkan jumlah dokumen dari tahap sebelumnya yang expression-nya menghasilkan nilai bukan NULL. Jika tidak ada expression yang diberikan, fungsi ini akan menampilkan jumlah total dokumen dari tahap sebelumnya.

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

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

Web

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

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

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

Kotlin

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

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

Java

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

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

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

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

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

COUNT_IF

Sintaksis:

count_if(expression: BOOLEAN) -> INT64

Deskripsi:

Menampilkan jumlah dokumen dari tahap sebelumnya yang expression-nya menghasilkan nilai TRUE.

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

Web

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

Kotlin

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

Java

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

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

COUNT_DISTINCT

Sintaksis:

count_distinct(expression: ANY) -> INT64

Deskripsi:

Menampilkan jumlah nilai expression unik yang bukan NULL dan bukan ABSENT.

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

Web

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

Kotlin

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

Java

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

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

SUM

Sintaksis:

sum(expression: ANY) -> NUMBER

Deskripsi:

Menampilkan hasil penjumlahan untuk semua nilai numerik, dengan mengabaikan nilai non-numerik. Menampilkan NaN jika ada nilai yang berupa NaN.

Output akan memiliki jenis yang sama dengan jenis input terluas, kecuali dalam kasus berikut:

  • INTEGER akan dikonversi menjadi DOUBLE jika tidak dapat direpresentasikan sebagai INTEGER.
Node.js
const result = await db.pipeline()
  .collection("cities")
  .aggregate(field("population").sum().as("totalPopulation"))
  .execute();

Web

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

Kotlin

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

Java

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

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

RATA-RATA

Sintaksis:

average(expression: ANY) -> FLOAT64

Deskripsi:

Menampilkan rata-rata untuk semua nilai numerik, dengan mengabaikan nilai non-numerik. Menghasilkan NaN jika ada nilai yang berupa NaN, atau menghasilkan NULL jika tidak ada nilai numerik yang digabungkan.

Output akan memiliki jenis yang sama dengan jenis input, kecuali dalam kasus berikut:

  • INTEGER akan dikonversi menjadi DOUBLE jika tidak dapat direpresentasikan sebagai INTEGER.
Node.js
const result = await db.pipeline()
  .collection("cities")
  .aggregate(field("population").average().as("averagePopulation"))
  .execute();

Web

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

Kotlin

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

Java

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

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

MINIMUM

Sintaksis:

minimum(expression: ANY) -> ANY

Deskripsi:

Menampilkan nilai minimum yang bukan NULL dan tidak kosong dari expression saat dihasilkan di setiap dokumen.

Jika tidak ada nilai yang bukan NULL dan tidak kosong, NULL akan ditampilkan. Hal ini mencakup saat tidak ada dokumen yang dipertimbangkan.

Jika ada beberapa nilai minimum yang setara, salah satu nilai tersebut dapat ditampilkan. Pengurutan jenis nilai mengikuti pengurutan yang didokumentasikan.

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

Web

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

Kotlin

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

Java

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

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

MAXIMUM

Sintaksis:

maximum(expression: ANY) -> ANY

Deskripsi:

Menampilkan nilai maksimum yang bukan NULL dan tidak kosong dari expression saat dihasilkan di setiap dokumen.

Jika tidak ada nilai yang bukan NULL dan tidak kosong, NULL akan ditampilkan. Hal ini mencakup saat tidak ada dokumen yang dipertimbangkan.

Jika ada beberapa nilai maksimum yang setara, salah satu nilai tersebut dapat ditampilkan. Pengurutan jenis nilai mengikuti pengurutan yang didokumentasikan.

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

Web

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

Kotlin

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

Java

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

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

FIRST

Sintaksis:

first(expression: ANY) -> ANY

Deskripsi:

Menampilkan nilai expression untuk dokumen pertama yang ditampilkan.

LAST

Sintaksis:

last(expression: ANY) -> ANY

Deskripsi:

Menampilkan nilai expression untuk dokumen terakhir yang ditampilkan.

ARRAY_AGG

Sintaksis:

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

Deskripsi:

Menampilkan array yang berisi semua nilai expression saat dihasilkan di setiap dokumen.

Jika ekspresi di-resolve ke nilai kosong, nilainya akan dikonversi menjadi NULL.

Urutan elemen dalam array output tidak stabil dan sebaiknya tidak diandalkan.

ARRAY_AGG_DISTINCT

Sintaksis:

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

Deskripsi:

Menampilkan array yang berisi semua nilai unik expression saat dihasilkan di setiap dokumen.

Jika ekspresi di-resolve ke nilai kosong, nilainya akan dikonversi menjadi NULL.

Urutan elemen dalam array output tidak stabil dan sebaiknya tidak diandalkan.

Fungsi Aritmetika

Semua fungsi aritmetika di Cloud Firestore memiliki perilaku berikut:

  • Menghasilkan NULL jika salah satu parameter inputnya adalah NULL.
  • Menghasilkan NaN jika salah satu argumennya adalah NaN.
  • Menghasilkan error jika terjadi overflow atau underflow.

Selain itu, saat fungsi aritmetika menerima beberapa argumen numerik dengan jenis yang berbeda (misalnya: add(5.0, 6)), Cloud Firestore akan secara implisit mengonversi argumen ke jenis input terluas. Jika hanya input INT32 yang diberikan, jenis nilai yang ditampilkan adalah INT64.

Nama Deskripsi
ABS Menampilkan nilai absolut dari number
ADD Menampilkan nilai x + y
SUBTRACT Menampilkan nilai x - y
MULTIPLY Menampilkan nilai x * y
DIVIDE Menampilkan nilai x / y
MOD Menampilkan sisa pembagian x / y
CEIL Menampilkan nilai pembulatan ke atas dari number
FLOOR Menampilkan bilangan bulat terbesar yang kurang dari atau sama dengan number
ROUND Membulatkan number ke places angka desimal
TRUNC Memangkas number ke places angka desimal
POW Menampilkan nilai base^exponent
SQRT Menampilkan akar kuadrat dari number
EXP Menampilkan bilangan Euler yang dipangkatkan exponent
LN Menampilkan logaritma natural dari number
LOG Menampilkan logaritma number
LOG10 Menampilkan logaritma number dengan basis 10
RAND Menampilkan bilangan floating point pseudo-random

ABS

Sintaksis:

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

Deskripsi:

Menampilkan nilai absolut dari number.

  • Menampilkan error jika fungsi terlalu besar untuk nilai INT32 atau INT64.

Contoh:

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

TAMBAHKAN

Sintaksis:

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

Deskripsi:

Menampilkan nilai x + y.

Contoh:

x y add(x, y)
20 3 23
10,0 1 11.0
22,5 2.0 24,5
INT64.MAX 1 [error]
INT64.MIN -1 [error]
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("soldBooks").add(field("unsoldBooks")).as("totalBooks"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("soldBooks").add(field("unsoldBooks")).as("totalBooks"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("soldBooks").add(Field("unsoldBooks")).as("totalBooks")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(Expression.add(field("soldBooks"), field("unsoldBooks")).alias("totalBooks"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(Expression.add(field("soldBooks"), field("unsoldBooks")).alias("totalBooks"))
    .execute();
    
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("soldBooks").add(Field.of("unsoldBooks")).as_("totalBooks"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(add(field("soldBooks"), field("unsoldBooks")).as("totalBooks"))
        .execute()
        .get();

SUBTRACT

Sintaksis:

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

Deskripsi:

Menampilkan nilai x - y.

Contoh:

x y subtract(x, y)
20 3 17
10,0 1 9.0
22,5 2.0 20,5
INT64.MAX -1 [error]
INT64.MIN 1 [error]
Node.js
const storeCredit = 7;
const result = await db.pipeline()
  .collection("books")
  .select(field("price").subtract(constant(storeCredit)).as("totalCost"))
  .execute();

Web

const storeCredit = 7;
const result = await execute(db.pipeline()
  .collection("books")
  .select(field("price").subtract(constant(storeCredit)).as("totalCost"))
);
Swift
let storeCredit = 7
let result = try await db.pipeline()
  .collection("books")
  .select([Field("price").subtract(Constant(storeCredit)).as("totalCost")])
  .execute()

Kotlin

val storeCredit = 7
val result = db.pipeline()
    .collection("books")
    .select(Expression.subtract(field("price"), storeCredit).alias("totalCost"))
    .execute()

Java

int storeCredit = 7;
Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(Expression.subtract(field("price"), storeCredit).alias("totalCost"))
    .execute();
    
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

store_credit = 7
result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("price").subtract(store_credit).as_("totalCost"))
    .execute()
)
Java
int storeCredit = 7;
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(subtract(field("price"), storeCredit).as("totalCost"))
        .execute()
        .get();

MULTIPLY

Sintaksis:

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

Deskripsi:

Menampilkan nilai x * y.

Contoh:

x y multiply(x, y)
20 3 60
10,0 1 10,0
22,5 2.0 45,0
INT64.MAX 2 [error]
INT64.MIN 2 [error]
FLOAT64.MAX FLOAT64.MAX +inf
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("price").multiply(field("soldBooks")).as("revenue"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("price").multiply(field("soldBooks")).as("revenue"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("price").multiply(Field("soldBooks")).as("revenue")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(Expression.multiply(field("price"), field("soldBooks")).alias("revenue"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(Expression.multiply(field("price"), field("soldBooks")).alias("revenue"))
    .execute();
    
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("price").multiply(Field.of("soldBooks")).as_("revenue"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(multiply(field("price"), field("soldBooks")).as("revenue"))
        .execute()
        .get();

DIVIDE

Sintaksis:

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

Deskripsi:

Menampilkan nilai x / y. Pembagian bilangan bulat dipangkas.

Contoh:

x y divide(x, y)
20 3 6
10,0 3 3,333...
22,5 2 11,25
10 0 [error]
1.0 0.0 +inf
-1,0 0.0 -inf
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("ratings").divide(field("soldBooks")).as("reviewRate"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("ratings").divide(field("soldBooks")).as("reviewRate"))
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("ratings").divide(Field("soldBooks")).as("reviewRate")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(Expression.divide(field("ratings"), field("soldBooks")).alias("reviewRate"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(Expression.divide(field("ratings"), field("soldBooks")).alias("reviewRate"))
    .execute();
    
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("ratings").divide(Field.of("soldBooks")).as_("reviewRate"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(divide(field("ratings"), field("soldBooks")).as("reviewRate"))
        .execute()
        .get();

MOD

Sintaksis:

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

Deskripsi:

Menampilkan sisa x / y.

  • Menampilkan error jika y bernilai nol untuk jenis bilangan bulat (INT64).
  • Menampilkan NaN jika y bernilai nol untuk jenis float (FLOAT64).

Contoh:

x y mod(x, y)
20 3 2
-10 3 -1
10 -3 1
-10 -3 -1
10 1 0
22,5 2 0,5
22,5 0.0 NaN
25 0 [error]
Node.js
const displayCapacity = 1000;
const result = await db.pipeline()
  .collection("books")
  .select(field("unsoldBooks").mod(constant(displayCapacity)).as("warehousedBooks"))
  .execute();

Web

const displayCapacity = 1000;
const result = await execute(db.pipeline()
  .collection("books")
  .select(field("unsoldBooks").mod(constant(displayCapacity)).as("warehousedBooks"))
);
Swift
let displayCapacity = 1000
let result = try await db.pipeline()
  .collection("books")
  .select([Field("unsoldBooks").mod(Constant(displayCapacity)).as("warehousedBooks")])
  .execute()

Kotlin

val displayCapacity = 1000
val result = db.pipeline()
    .collection("books")
    .select(Expression.mod(field("unsoldBooks"), displayCapacity).alias("warehousedBooks"))
    .execute()

Java

int displayCapacity = 1000;
Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(Expression.mod(field("unsoldBooks"), displayCapacity).alias("warehousedBooks"))
    .execute();
    
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

display_capacity = 1000
result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("unsoldBooks").mod(display_capacity).as_("warehousedBooks"))
    .execute()
)
Java
int displayCapacity = 1000;
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(mod(field("unsoldBooks"), displayCapacity).as("warehousedBooks"))
        .execute()
        .get();

CEIL

Sintaksis:

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

Deskripsi:

Menampilkan nilai bilangan bulat terkecil yang tidak kurang dari number.

Contoh:

angka ceil(number)
20 20
10 10
0 0
24L 24L
-0,4 -0,0
0,4 1.0
22,5 23,0
+inf +inf
-inf -inf
Node.js
const booksPerShelf = 100;
const result = await db.pipeline()
  .collection("books")
  .select(
    field("unsoldBooks").divide(constant(booksPerShelf)).ceil().as("requiredShelves")
  )
  .execute();

Web

const booksPerShelf = 100;
const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("unsoldBooks").divide(constant(booksPerShelf)).ceil().as("requiredShelves")
  )
);
Swift
let booksPerShelf = 100
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("unsoldBooks").divide(Constant(booksPerShelf)).ceil().as("requiredShelves")
  ])
  .execute()

Kotlin

val booksPerShelf = 100
val result = db.pipeline()
    .collection("books")
    .select(
        Expression.divide(field("unsoldBooks"), booksPerShelf).ceil().alias("requiredShelves")
    )
    .execute()

Java

int booksPerShelf = 100;
Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        Expression.divide(field("unsoldBooks"), booksPerShelf).ceil().alias("requiredShelves")
    )
    .execute();
    
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

books_per_shelf = 100
result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("unsoldBooks")
        .divide(books_per_shelf)
        .ceil()
        .as_("requiredShelves")
    )
    .execute()
)
Java
int booksPerShelf = 100;
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(ceil(divide(field("unsoldBooks"), booksPerShelf)).as("requiredShelves"))
        .execute()
        .get();

FLOOR

Sintaksis:

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

Deskripsi:

Menampilkan nilai bilangan bulat terbesar yang tidak lebih besar dari number.

Contoh:

angka floor(number)
20 20
10 10
0 0
2147483648 2147483648
-0,4 -1,0
0,4 0.0
22,5 22,0
+inf +inf
-inf -inf
Node.js
const result = await db.pipeline()
  .collection("books")
  .addFields(
    field("wordCount").divide(field("pages")).floor().as("wordsPerPage")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .addFields(
    field("wordCount").divide(field("pages")).floor().as("wordsPerPage")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .addFields([
    Field("wordCount").divide(Field("pages")).floor().as("wordsPerPage")
  ])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .addFields(
        Expression.divide(field("wordCount"), field("pages")).floor().alias("wordsPerPage")
    )
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .addFields(
        Expression.divide(field("wordCount"), field("pages")).floor().alias("wordsPerPage")
    )
    .execute();
    
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .add_fields(
        Field.of("wordCount").divide(Field.of("pages")).floor().as_("wordsPerPage")
    )
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .addFields(floor(divide(field("wordCount"), field("pages"))).as("wordsPerPage"))
        .execute()
        .get();

ROUND

Sintaksis:

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

Deskripsi:

Membulatkan places digit dari number. Membulatkan digit dari sebelah kanan tanda desimal jika places bernilai positif, dan ke sebelah kiri tanda desimal jika bernilai negatif.

  • Jika hanya number yang diberikan, angka akan dibulatkan ke nilai bilangan bulat terdekat.
  • Jika nilainya tepat di tengah, pembulatan dilakukan menjauhi nol.
  • error ditampilkan jika pembulatan dengan nilai places negatif menyebabkan overflow.

Contoh:

angka tempat round(number, places)
15,5 0 16.0
-15,5 0 -16,0
15 1 15
15 0 15
15 -1 20
15 -2 0
15.48924 1 15,5
231-1 -1 [error]
263-1L -1 [error]
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("soldBooks").multiply(field("price")).round().as("partialRevenue"))
  .aggregate(field("partialRevenue").sum().as("totalRevenue"))
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(field("soldBooks").multiply(field("price")).round().as("partialRevenue"))
  .aggregate(field("partialRevenue").sum().as("totalRevenue"))
  );
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([Field("soldBooks").multiply(Field("price")).round().as("partialRevenue")])
  .aggregate([Field("partialRevenue").sum().as("totalRevenue")])
  .execute()

Kotlin

val result = db.pipeline()
    .collection("books")
    .select(Expression.multiply(field("soldBooks"), field("price")).round().alias("partialRevenue"))
    .aggregate(AggregateFunction.sum("partialRevenue").alias("totalRevenue"))
    .execute()

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(Expression.multiply(field("soldBooks"), field("price")).round().alias("partialRevenue"))
    .aggregate(AggregateFunction.sum("partialRevenue").alias("totalRevenue"))
    .execute();
    
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("soldBooks")
        .multiply(Field.of("price"))
        .round()
        .as_("partialRevenue")
    )
    .aggregate(Field.of("partialRevenue").sum().as_("totalRevenue"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(round(multiply(field("soldBooks"), field("price"))).as("partialRevenue"))
        .aggregate(sum("partialRevenue").as("totalRevenue"))
        .execute()
        .get();

TRUNC

Sintaksis:

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

Deskripsi:

Memangkas number ke places angka desimal yang ditentukan. Memangkas digit dari sebelah kanan tanda desimal jika places bernilai positif dan ke sebelah kiri tanda desimal jika bernilai negatif.

  • Jika hanya number yang diberikan, memangkas angka ke nilai bilangan bulat terdekat menuju nol.
  • error ditampilkan jika pemotongan menyebabkan overflow.

Contoh:

angka tempat 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

Sintaksis:

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

Deskripsi:

Menampilkan nilai base yang dipangkatkan exponent.

  • Menampilkan error jika base <= 0 dan exponent bernilai negatif.

  • Untuk exponent, pow(1, exponent) adalah 1.

  • Untuk base, pow(base, 0) adalah 1.

Contoh:

base eksponen pow(base, exponent)
2 3 8.0
2 -3 0,125
+inf 0 1.0
1 +inf 1.0
-1 0,5 [error]
0 -1 [error]
Node.js
const googleplex = { latitude: 37.4221, longitude: 122.0853 };
const result = await db.pipeline()
  .collection("cities")
  .addFields(
    field("lat").subtract(constant(googleplex.latitude))
      .multiply(111 /* km per degree */)
      .pow(2)
      .as("latitudeDifference"),
    field("lng").subtract(constant(googleplex.longitude))
      .multiply(111 /* km per degree */)
      .pow(2)
      .as("longitudeDifference")
  )
  .select(
    field("latitudeDifference").add(field("longitudeDifference")).sqrt()
      // Inaccurate for large distances or close to poles
      .as("approximateDistanceToGoogle")
  )
  .execute();

Web

const googleplex = { latitude: 37.4221, longitude: 122.0853 };
const result = await execute(db.pipeline()
  .collection("cities")
  .addFields(
    field("lat").subtract(constant(googleplex.latitude))
      .multiply(111 /* km per degree */)
      .pow(2)
      .as("latitudeDifference"),
    field("lng").subtract(constant(googleplex.longitude))
      .multiply(111 /* km per degree */)
      .pow(2)
      .as("longitudeDifference")
  )
  .select(
    field("latitudeDifference").add(field("longitudeDifference")).sqrt()
      // Inaccurate for large distances or close to poles
      .as("approximateDistanceToGoogle")
  )
);
Swift
let googleplex = CLLocation(latitude: 37.4221, longitude: 122.0853)
let result = try await db.pipeline()
  .collection("cities")
  .addFields([
    Field("lat").subtract(Constant(googleplex.coordinate.latitude))
      .multiply(111 /* km per degree */)
      .pow(2)
      .as("latitudeDifference"),
    Field("lng").subtract(Constant(googleplex.coordinate.latitude))
      .multiply(111 /* km per degree */)
      .pow(2)
      .as("longitudeDifference")
  ])
  .select([
    Field("latitudeDifference").add(Field("longitudeDifference")).sqrt()
      // Inaccurate for large distances or close to poles
      .as("approximateDistanceToGoogle")
  ])
  .execute()

Kotlin

val googleplex = GeoPoint(37.4221, -122.0853)
val result = db.pipeline()
    .collection("cities")
    .addFields(
        field("lat").subtract(googleplex.latitude)
            .multiply(111 /* km per degree */)
            .pow(2)
            .alias("latitudeDifference"),
        field("lng").subtract(googleplex.longitude)
            .multiply(111 /* km per degree */)
            .pow(2)
            .alias("longitudeDifference")
    )
    .select(
        field("latitudeDifference").add(field("longitudeDifference")).sqrt()
            // Inaccurate for large distances or close to poles
            .alias("approximateDistanceToGoogle")
    )
    .execute()

Java

GeoPoint googleplex = new GeoPoint(37.4221, -122.0853);
Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("cities")
    .addFields(
        field("lat").subtract(googleplex.getLatitude())
            .multiply(111 /* km per degree */)
            .pow(2)
            .alias("latitudeDifference"),
        field("lng").subtract(googleplex.getLongitude())
            .multiply(111 /* km per degree */)
            .pow(2)
            .alias("longitudeDifference")
    )
    .select(
        field("latitudeDifference").add(field("longitudeDifference")).sqrt()
            // Inaccurate for large distances or close to poles
            .alias("approximateDistanceToGoogle")
    )
    .execute();
    
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

googleplexLat = 37.4221
googleplexLng = -122.0853
result = (
    client.pipeline()
    .collection("cities")
    .add_fields(
        Field.of("lat")
        .subtract(googleplexLat)
        .multiply(111)  # km per degree
        .pow(2)
        .as_("latitudeDifference"),
        Field.of("lng")
        .subtract(googleplexLng)
        .multiply(111)  # km per degree
        .pow(2)
        .as_("longitudeDifference"),
    )
    .select(
        Field.of("latitudeDifference")
        .add(Field.of("longitudeDifference"))
        .sqrt()
        # Inaccurate for large distances or close to poles
        .as_("approximateDistanceToGoogle")
    )
    .execute()
)
Java
double googleplexLat = 37.4221;
double googleplexLng = -122.0853;
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("cities")
        .addFields(
            pow(multiply(subtract(field("lat"), googleplexLat), 111), 2)
                .as("latitudeDifference"),
            pow(multiply(subtract(field("lng"), googleplexLng), 111), 2)
                .as("longitudeDifference"))
        .select(
            sqrt(add(field("latitudeDifference"), field("longitudeDifference")))
                // Inaccurate for large distances or close to poles
                .as("approximateDistanceToGoogle"))
        .execute()
        .get();

SQRT

Sintaksis:

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

Deskripsi:

Menampilkan akar kuadrat dari number.

  • Menampilkan error jika number bernilai negatif.

Contoh:

angka sqrt(number)
25 5.0
12.002 3,464...
0.0 0.0
NaN NaN
+inf +inf
-inf [error]
x < 0 [error]
Node.js
const googleplex = { latitude: 37.4221, longitude: 122.0853 };
const result = await db.pipeline()
  .collection("cities")
  .addFields(
    field("lat").subtract(constant(googleplex.latitude))
      .multiply(111 /* km per degree */)
      .pow(2)
      .as("latitudeDifference"),
    field("lng").subtract(constant(googleplex.longitude))
      .multiply(111 /* km per degree */)
      .pow(2)
      .as("longitudeDifference")
  )
  .select(
    field("latitudeDifference").add(field("longitudeDifference")).sqrt()
      // Inaccurate for large distances or close to poles
      .as("approximateDistanceToGoogle")
  )
  .execute();

Web

const googleplex = { latitude: 37.4221, longitude: 122.0853 };
const result = await execute(db.pipeline()
  .collection("cities")
  .addFields(
    field("lat").subtract(constant(googleplex.latitude))
      .multiply(111 /* km per degree */)
      .pow(2)
      .as("latitudeDifference"),
    field("lng").subtract(constant(googleplex.longitude))
      .multiply(111 /* km per degree */)
      .pow(2)
      .as("longitudeDifference")
  )
  .select(
    field("latitudeDifference").add(field("longitudeDifference")).sqrt()
      // Inaccurate for large distances or close to poles
      .as("approximateDistanceToGoogle")
  )
);
Swift
let googleplex = CLLocation(latitude: 37.4221, longitude: 122.0853)
let result = try await db.pipeline()
  .collection("cities")
  .addFields([
    Field("lat").subtract(Constant(googleplex.coordinate.latitude))
      .multiply(111 /* km per degree */)
      .pow(2)
      .as("latitudeDifference"),
    Field("lng").subtract(Constant(googleplex.coordinate.latitude))
      .multiply(111 /* km per degree */)
      .pow(2)
      .as("longitudeDifference")
  ])
  .select([
    Field("latitudeDifference").add(Field("longitudeDifference")).sqrt()
      // Inaccurate for large distances or close to poles
      .as("approximateDistanceToGoogle")
  ])
  .execute()

Kotlin

val googleplex = GeoPoint(37.4221, -122.0853)
val result = db.pipeline()
    .collection("cities")
    .addFields(
        field("lat").subtract(googleplex.latitude)
            .multiply(111 /* km per degree */)
            .pow(2)
            .alias("latitudeDifference"),
        field("lng").subtract(googleplex.longitude)
            .multiply(111 /* km per degree */)
            .pow(2)
            .alias("longitudeDifference")
    )
    .select(
        field("latitudeDifference").add(field("longitudeDifference")).sqrt()
            // Inaccurate for large distances or close to poles
            .alias("approximateDistanceToGoogle")
    )
    .execute()

Java

GeoPoint googleplex = new GeoPoint(37.4221, -122.0853);
Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("cities")
    .addFields(
        field("lat").subtract(googleplex.getLatitude())
            .multiply(111 /* km per degree */)
            .pow(2)
            .alias("latitudeDifference"),
        field("lng").subtract(googleplex.getLongitude())
            .multiply(111 /* km per degree */)
            .pow(2)
            .alias("longitudeDifference")
    )
    .select(
        field("latitudeDifference").add(field("longitudeDifference")).sqrt()
            // Inaccurate for large distances or close to poles
            .alias("approximateDistanceToGoogle")
    )
    .execute();
    
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

googleplexLat = 37.4221
googleplexLng = -122.0853
result = (
    client.pipeline()
    .collection("cities")
    .add_fields(
        Field.of("lat")
        .subtract(googleplexLat)
        .multiply(111)  # km per degree
        .pow(2)
        .as_("latitudeDifference"),
        Field.of("lng")
        .subtract(googleplexLng)
        .multiply(111)  # km per degree
        .pow(2)
        .as_("longitudeDifference"),
    )
    .select(
        Field.of("latitudeDifference")
        .add(Field.of("longitudeDifference"))
        .sqrt()
        # Inaccurate for large distances or close to poles
        .as_("approximateDistanceToGoogle")
    )
    .execute()
)
Java
double googleplexLat = 37.4221;
double googleplexLng = -122.0853;
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("cities")
        .addFields(
            pow(multiply(subtract(field("lat"), googleplexLat), 111), 2)
                .as("latitudeDifference"),
            pow(multiply(subtract(field("lng"), googleplexLng), 111), 2)
                .as("longitudeDifference"))
        .select(
            sqrt(add(field("latitudeDifference"), field("longitudeDifference")))
                // Inaccurate for large distances or close to poles
                .as("approximateDistanceToGoogle"))
        .execute()
        .get();

EXP

Sintaksis:

exp(exponent: FLOAT64) -> FLOAT64

Deskripsi:

Menampilkan nilai bilangan Euler yang dipangkatkan exponent, yang juga disebut fungsi eksponensial natural.

Contoh:

eksponen exp(exponent)
0.0 1.0
10 e^10 (FLOAT64)
+inf +inf
-inf 0
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("rating").exp().as("expRating"))
  .execute();

Web

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

Kotlin

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

Java

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

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

LN

Sintaksis:

ln(number: FLOAT64) -> FLOAT64

Deskripsi:

Menampilkan logaritma natural dari number. Fungsi ini setara dengan log(number).

Contoh:

angka ln(number)
1 0.0
2L 0.693...
1.0 0.0
e (FLOAT64) 1.0
-inf NaN
+inf +inf
x <= 0 [error]
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(field("rating").ln().as("lnRating"))
  .execute();

Web

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

Kotlin

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

Java

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

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

LOG

Sintaksis:

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

Deskripsi:

Menampilkan logaritma number dengan base.

  • Jika hanya number yang diberikan, fungsi ini akan menampilkan logaritma number dengan base (sama dengan ln(number)).

Contoh:

angka base log(number, base)
100 10 2.0
-inf Numeric NaN
Numeric. +inf NaN
number <= 0 Numeric [error]
Numeric base <= 0 [error]
Numeric 1.0 [error]

LOG10

Sintaksis:

log10(x: FLOAT64) -> FLOAT64

Deskripsi:

Menampilkan logaritma number dengan basis 10.

Contoh:

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

RAND

Sintaksis:

rand() -> FLOAT64

Deskripsi:

Menampilkan angka floating point pseudo-random, yang dipilih secara seragam antara 0.0 (inklusif) dan 1.0 (eksklusif).

Fungsi Array

Nama Deskripsi
ARRAY Menampilkan ARRAY yang berisi satu elemen untuk setiap argumen input
ARRAY_CONCAT Menggabungkan beberapa array menjadi satu ARRAY
ARRAY_CONTAINS Menampilkan TRUE jika suatu ARRAY berisi nilai tertentu
ARRAY_CONTAINS_ALL Menampilkan TRUE jika semua nilai ada dalam ARRAY
ARRAY_CONTAINS_ANY Menampilkan TRUE jika salah satu nilai ada dalam ARRAY
ARRAY_FILTER Memfilter elemen dari ARRAY yang tidak memenuhi predikat
ARRAY_FIRST Menampilkan elemen pertama dalam ARRAY
ARRAY_FIRST_N Menampilkan n elemen pertama dalam ARRAY
ARRAY_GET Menampilkan elemen pada indeks tertentu dalam suatu ARRAY
ARRAY_INDEX_OF Menampilkan indeks kemunculan pertama nilai dalam ARRAY
ARRAY_INDEX_OF_ALL Menampilkan semua indeks nilai dalam ARRAY
ARRAY_LENGTH Menampilkan jumlah elemen dalam ARRAY
ARRAY_LAST Menampilkan elemen terakhir dalam ARRAY
ARRAY_LAST_N Menampilkan n elemen terakhir dalam ARRAY
ARRAY_REVERSE Membalikkan urutan elemen dalam ARRAY
ARRAY_SLICE Menampilkan slice ARRAY
ARRAY_TRANSFORM Mengubah elemen dalam ARRAY dengan menerapkan ekspresi ke setiap elemen
MAXIMUM Menampilkan nilai maksimum dalam ARRAY
MAXIMUM_N Menampilkan n nilai terbesar dalam ARRAY
MINIMUM Menampilkan nilai minimum dalam ARRAY
MINIMUM_N Menampilkan n nilai terkecil dalam ARRAY
SUM Menampilkan hasil penjumlahan semua nilai NUMERIC dalam ARRAY.
JOIN Menghasilkan penyambungan elemen dalam ARRAY sebagai nilai STRING.

ARRAY

Sintaksis:

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

Deskripsi:

Menyusun array dari elemen yang diberikan.

  • Jika argumen tidak ada, penggantinya adalah NULL dalam array yang dihasilkan.

Contoh:

nilai 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

Sintaksis:

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

Deskripsi:

Menyambungkan dua array atau lebih menjadi satu ARRAY.

Contoh:

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

Kotlin

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

Java

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

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

ARRAY_CONTAINS

Sintaksis:

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

Deskripsi:

Menampilkan TRUE jika value ditemukan dalam array, dan FALSE jika sebaliknya.

Contoh:

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

Web

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

Kotlin

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

Java

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

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

ARRAY_CONTAINS_ALL

Sintaksis:

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

Deskripsi:

Menampilkan TRUE jika semua search_values ditemukan dalam array, dan FALSE jika sebaliknya.

Contoh:

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

Web

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

Kotlin

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

Java

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

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

ARRAY_CONTAINS_ANY

Sintaksis:

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

Deskripsi:

Menampilkan TRUE jika salah satu dari search_values ditemukan dalam array, dan FALSE jika sebaliknya.

Contoh:

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

Web

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

Kotlin

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

Java

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

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

ARRAY_FILTER

Sintaksis:

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

Deskripsi:

Memfilter array menggunakan ekspresi predicate, menampilkan array baru dengan hanya elemen yang memenuhi predikat.

  • Untuk setiap elemen di array, predicate dievaluasi. Jika menampilkan true, elemen disertakan dalam hasil; jika tidak (apabila menampilkan false atau null), elemen akan dihilangkan.
  • Jika predicate dievaluasi ke nilai non-boolean atau non-null, fungsi ini akan menampilkan error.

Contoh:

array predikat 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

Sintaksis:

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

Deskripsi:

Menampilkan elemen pada index berbasis 0 dalam array.

  • Jika index bernilai negatif, elemen akan diakses dari akhir array, dengan -1 sebagai elemen terakhir.
  • Jika array bukan berjenis ARRAY dan bukan null, fungsi ini akan menampilkan error.
  • Jika index berada di luar batas, fungsi ini akan menampilkan nilai kosong.
  • Jika index bukan berjenis INT64, fungsi ini akan menampilkan error.

Contoh:

array indeks array_get(array, index)
[1, 2, 3] 0 1
[1, 2, 3] -1 3
[1, 2, 3] 3 tidak ada
[1, 2, 3] -4 tidak ada
"abc" 0 error
null 0 null
Array "a" error
Array 2.0 error

ARRAY_LENGTH

Sintaksis:

array_length(array: ARRAY) -> INT64

Deskripsi:

Menampilkan jumlah elemen dalam array.

Contoh:

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

Web

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

Kotlin

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

Java

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

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

ARRAY_REVERSE

Sintaksis:

array_reverse(array: ARRAY) -> ARRAY

Deskripsi:

Membalikkan array yang diberikan.

Contoh:

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

Web

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

Kotlin

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

Java

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

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

ARRAY_FIRST

Sintaksis:

array_first(array: ARRAY) -> ANY

Deskripsi:

Menampilkan elemen pertama dalam array. Fungsi ini setara dengan array_get(array, 0).

  • Jika array kosong, fungsi ini akan menampilkan nilai absent.

Contoh:

array array_first(array)
[1, 2, 3] 1
[] tidak ada

ARRAY_FIRST_N

Sintaksis:

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

Deskripsi:

Menampilkan n elemen pertama dari array. Fungsi ini setara dengan array_slice(array, 0, n).

  • Jika n bernilai negatif, fungsi ini akan menampilkan error.

Contoh:

array 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

Sintaksis:

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

Deskripsi:

Menampilkan indeks berbasis 0 dari kemunculan pertama value dalam array. Menampilkan -1 jika value tidak ditemukan.

Contoh:

array nilai 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

Sintaksis:

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

Deskripsi:

Menampilkan array yang berisi indeks berbasis 0 dari semua kemunculan value dalam array. Menampilkan [] jika value tidak ditemukan.

Contoh:

array nilai 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

Sintaksis:

array_last(array: ARRAY) -> ANY

Deskripsi:

Menampilkan elemen terakhir dalam array. Fungsi ini setara dengan array_get(array, -1).

  • Jika array kosong, fungsi ini akan menampilkan nilai absent.

Contoh:

array array_last(array)
[1, 2, 3] 3
[] tidak ada

ARRAY_LAST_N

Sintaksis:

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

Deskripsi:

Menampilkan n elemen terakhir dari array.

  • Jika n bernilai negatif, fungsi ini akan menampilkan error.

Contoh:

array 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

Sintaksis:

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

Deskripsi:

Menampilkan sebagian array yang dimulai dari offset indeks berbasis 0, dan menyertakan length elemen.

  • Jika offset bernilai negatif, fungsi ini akan menunjukkan posisi awal dari akhir array, dengan -1 sebagai elemen terakhir.
  • Jika length lebih besar daripada jumlah elemen yang tersisa dalam array setelah offset, hasilnya akan diperluas hingga akhir array.
  • length tidak boleh bernilai negatif karena akan menghasilkan error.

Contoh:

array offset panjang 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

Sintaksis:

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

Deskripsi:

Mentransformasi array dengan menerapkan expression ke setiap elemen, menampilkan array baru dengan elemen yang ditransformasi. Array output akan selalu memiliki ukuran yang sama dengan array input.

  • expression dapat berupa fungsi unary element -> result, atau fungsi biner (element, index) -> result.
  • Jika expression bersifat unary, fungsi ini dipanggil dengan setiap elemen array.
  • Jika expression adalah biner, maka akan dipanggil dengan setiap elemen array dan indeks berbasis 0 yang sesuai.

Contoh:

array ekspresi 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

Sintaksis:

maximum(array: ARRAY) -> ANY

Deskripsi:

Menampilkan nilai maksimum dalam array.

  • Nilai NULL akan diabaikan selama perbandingan.
  • Jika array kosong atau hanya berisi nilai NULL, fungsi ini akan menampilkan NULL.

Contoh:

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

MAXIMUM_N

Sintaksis:

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

Deskripsi:

Menampilkan array dari n nilai terbesar dalam array dengan urutan menurun.

  • Nilai NULL akan diabaikan.
  • Jika n bernilai negatif, fungsi ini akan menampilkan error.

Contoh:

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

MINIMUM

Sintaksis:

minimum(array: ARRAY) -> ANY

Deskripsi:

Menampilkan nilai minimum dalam array.

  • Nilai NULL akan diabaikan selama perbandingan.
  • Jika array kosong atau hanya berisi nilai NULL, fungsi ini akan menampilkan NULL.

Contoh:

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

MINIMUM_N

Sintaksis:

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

Deskripsi:

Menampilkan array dari n nilai terkecil dalam array dengan urutan naik.

  • Nilai NULL akan diabaikan.
  • Jika n bernilai negatif, fungsi ini akan menampilkan error.

Contoh:

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

SUM

Sintaksis:

sum(array: ARRAY) -> INT64 | FLOAT64

Deskripsi:

Menampilkan hasil penjumlahan semua nilai NUMERIC dalam ARRAY.

  • Nilai non-numerik dalam array akan diabaikan.
  • Jika ada nilai numerik dalam array yang bernilai NaN, fungsi ini akan menampilkan NaN.
  • Jenis nilai yang ditampilkan ditentukan oleh jenis numerik terluas dalam array: INT64 < FLOAT64.
  • Jika terjadi overflow bilangan bulat 64-bit sebelum nilai floating point dijumlahkan, fungsi ini akan menampilkan error. Jika nilai floating point dijumlahkan, overflow akan menghasilkan +/- tak terhingga.
  • Jika array tidak berisi nilai numerik sama sekali, fungsi ini akan menampilkan NULL.

Contoh:

array 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] error
[INT64.MAX_VALUE, 1, -1.0] error
[INT64.MAX_VALUE, 1.0] 9.223372036854776e+18

GABUNG

Sintaksis:

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

Deskripsi:

Menampilkan penyambungan elemen dalam array sebagai STRING. array dapat berupa jenis data STRING atau BYTES.

  • Semua elemen dalam array, delimiter, dan null_text harus memiliki jenis yang sama; semuanya harus berupa STRING atau BYTES.
  • Jika null_text diberikan, semua nilai NULL dalam array akan diganti dengan null_text.
  • Jika null_text tidak diberikan, nilai NULL dalam array akan dihilangkan dari hasil.

Contoh:

Jika null_text tidak diberikan:

array pembatas 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'] "," error
["a", "c"] b',' error
[b'a', b'c'] "," error

Jika null_text diberikan:

array pembatas 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' error
[b'a', null] b',' "N" error

Fungsi Perbandingan

Nama Deskripsi
EQUAL Perbandingan kesetaraan
GREATER_THAN Perbandingan lebih besar dari
GREATER_THAN_OR_EQUAL Perbandingan lebih besar dari atau sama dengan
LESS_THAN Perbandingan kurang dari
LESS_THAN_OR_EQUAL Perbandingan kurang dari atau sama dengan
NOT_EQUAL Perbandingan tidak sama dengan
CMP Perbandingan umum

EQUAL

Sintaksis:

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

Contoh:

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

Deskripsi:

Menampilkan TRUE jika x dan y sama, dan FALSE jika sebaliknya.

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

Web

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

Kotlin

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

Java

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

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

GREATER_THAN

Sintaksis:

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

Deskripsi:

Menampilkan TRUE jika x lebih besar dari y, dan FALSE jika sebaliknya.

Jika x dan y tidak dapat dibandingkan, FALSE akan ditampilkan.

Contoh:

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

Web

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

Kotlin

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

Java

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

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

GREATER_THAN_OR_EQUAL

Sintaksis:

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

Deskripsi:

Menampilkan TRUE jika x lebih besar dari atau sama dengan y, dan FALSE jika sebaliknya.

Jika x dan y tidak dapat dibandingkan, FALSE akan ditampilkan.

Contoh:

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

Web

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

Kotlin

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

Java

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

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

LESS_THAN

Sintaksis:

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

Deskripsi:

Menampilkan TRUE jika x kurang dari y, dan FALSE jika sebaliknya.

Jika x dan y tidak dapat dibandingkan, FALSE akan ditampilkan.

Contoh:

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

Web

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

Kotlin

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

Java

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

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

LESS_THAN_OR_EQUAL

Sintaksis:

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

Deskripsi:

Menampilkan TRUE jika x kurang dari atau sama dengan y, dan FALSE jika sebaliknya.

Jika x dan y tidak dapat dibandingkan, FALSE akan ditampilkan.

Contoh:

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

Web

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

Kotlin

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

Java

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

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

NOT_EQUAL

Sintaksis:

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

Deskripsi:

Menampilkan TRUE jika x tidak sama dengan y, dan FALSE jika sebaliknya.

Contoh:

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

CMP

Sintaksis:

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

Deskripsi:

Membandingkan x & y, menampilkan:

  • 1L jika x lebih besar dari y.
  • -1L jika x kurang dari y.
  • 0L dalam kasus lainnya.

Tidak seperti fungsi perbandingan lainnya, fungsi cmp(...) berfungsi di berbagai jenis dengan mengikuti pengurutan yang sama dengan yang digunakan dalam tahap sort(...). Lihat urutan jenis nilai untuk mengetahui cara nilai diurutkan di berbagai jenis.

Contoh:

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

Proses Debug Functions

Nama Deskripsi
EXISTS Menampilkan TRUE jika nilainya bukan nilai kosong
IS_ABSENT Menampilkan TRUE jika nilainya kosong
IF_ABSENT Mengganti nilai dengan ekspresi jika nilainya kosong
IS_ERROR Mendeteksi dan memeriksa apakah error telah ditampilkan oleh ekspresi yang mendasarinya
IF_ERROR Mengganti nilai dengan ekspresi jika telah menampilkan error
ERROR Menghentikan evaluasi dan menampilkan error dengan pesan yang ditentukan

EXISTS

Sintaksis:

exists(value: ANY) -> BOOLEAN

Deskripsi:

Menampilkan TRUE jika value bukan nilai kosong.

Contoh:

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

Contoh:

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

Contoh:

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

Java

Contoh:

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

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

IS_ABSENT

Sintaksis:

is_absent(value: ANY) -> BOOLEAN

Deskripsi:

Menampilkan TRUE jika value adalah nilai kosong, dan FALSE jika sebaliknya. Nilai kosong adalah nilai yang tidak ada dalam input, seperti kolom dokumen yang tidak ada.

Contoh:

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

IF_ABSENT

Sintaksis:

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

Deskripsi:

Jika value adalah nilai kosong, hasil yang ditampilkan adalah replacement. Jika tidak, hasil yang ditampilkan adalah value.

Contoh:

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

IS_ERROR

Sintaksis:

is_error(try: ANY) -> BOOLEAN

Deskripsi:

Menampilkan TRUE jika terjadi error saat menghasilkan try. Menampilkan FALSE jika tidak cocok.

IF_ERROR

Sintaksis:

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

Deskripsi:

Jika terjadi error saat menghasilkan try, hasil yang ditampilkan adalah replacement. Jika tidak, nilai yang ditampilkan adalah try yang di-resolve.

KESALAHAN

Sintaksis:

error(message: STRING) -> ANY

Deskripsi:

Evaluasi fungsi error akan menyebabkan evaluasi pipeline berakhir dengan error. message yang diberikan disertakan dalam error.

Contoh:

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

Fungsi Referensi

Jenis REFERENCE bertindak sebagai "penunjuk" ke dokumen lain dalam database (atau bahkan database lain). Fungsi berikut memungkinkan manipulasi jenis ini selama eksekusi kueri.

Nama Deskripsi
COLLECTION_ID Menampilkan ID koleksi leaf dalam referensi yang diberikan
DOCUMENT_ID Menampilkan ID dokumen dalam referensi yang diberikan
PARENT Menampilkan referensi induk
REFERENCE_SLICE Menampilkan subset segmen dari referensi yang diberikan

COLLECTION_ID

Sintaksis:

collection_id(ref: REFERENCE) -> STRING

Deskripsi:

Menampilkan ID koleksi leaf dari REFERENCE yang diberikan.

Contoh:

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

DOCUMENT_ID

Sintaksis:

document_id(ref: REFERENCE) -> ANY

Deskripsi:

Menampilkan ID dokumen dari REFERENCE yang diberikan.

Contoh:

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

PARENT

Sintaksis:

parent(ref: REFERENCE) -> REFERENCE

Deskripsi:

Menampilkan REFERENCE induk dari referensi yang diberikan atau NULL jika ref sudah menjadi referensi root.

Contoh:

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

REFERENCE_SLICE

Sintaksis:

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

Deskripsi:

REFERENCE adalah daftar tuple (collection_id, document_id) dan fungsi ini membuat tampilan daftar tersebut dapat ditampilkan, seperti array_slice(...).

Menampilkan REFERENCE baru yang merupakan subset dari segmen ref yang diberikan.

  • offset: Indeks awal (berbasis 0) dari slice. Jika negatif, nilai ini adalah offset dari akhir referensi.
  • length: Jumlah segmen yang akan disertakan dalam slice.

Contoh:

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

Fungsi Logika

Nama Deskripsi
AND Menjalankan logika AND
OR Menjalankan logika OR
XOR Menjalankan logika XOR
NOT Menjalankan logika NOT
NOR Menjalankan logika NOR
CONDITIONAL Mengevaluasi cabang berdasarkan ekspresi kondisional.
IF_NULL Menampilkan nilai selain null pertama
SWITCH_ON Membuat cabang evaluasi berdasarkan serangkaian kondisi
EQUAL_ANY Memeriksa apakah nilai sama dengan elemen apa pun dalam array
NOT_EQUAL_ANY Memeriksa apakah nilai tidak sama dengan elemen apa pun dalam array
MAXIMUM Menampilkan nilai maksimum dalam sekumpulan nilai
MINIMUM Menampilkan nilai minimum dalam sekumpulan nilai

DAN

Sintaksis:

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

Deskripsi:

Menampilkan logika AND dari dua nilai boolean atau lebih.

Menampilkan NULL jika hasilnya tidak dapat diperoleh karena salah satu nilai yang diberikan adalah ABSENT atau NULL.

Contoh:

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

ATAU

Sintaksis:

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

Deskripsi:

Menampilkan logika OR dari dua nilai boolean atau lebih.

Menampilkan NULL jika hasilnya tidak dapat diperoleh karena salah satu nilai yang diberikan adalah ABSENT atau NULL.

Contoh:

x y or(x, y)
TRUE TRUE TRUE
FALSE TRUE TRUE
NULL TRUE TRUE
ABSENT TRUE TRUE
NULL FALSE NULL
FALSE ABSENT NULL
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(
    or(field("genre").equal("Fantasy"), field("tags").arrayContains("adventure"))
      .as("matchesSearchFilters")
  )
  .execute();

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    or(field("genre").equal("Fantasy"), field("tags").arrayContains("adventure"))
      .as("matchesSearchFilters")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    (Field("genre").equal("Fantasy") || Field("tags").arrayContains("adventure"))
      .as("matchesSearchFilters")
  ])
  .execute()

Kotlin

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

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        Expression.or(
            field("genre").equal("Fantasy"),
            field("tags").arrayContains("adventure")
        ).alias("matchesSearchFilters")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field, And, Or

result = (
    client.pipeline()
    .collection("books")
    .select(
        Or(
            Field.of("genre").equal("Fantasy"),
            Field.of("tags").array_contains("adventure"),
        ).as_("matchesSearchFilters")
    )
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(
            or(equal(field("genre"), "Fantasy"), arrayContains(field("tags"), "adventure"))
                .as("matchesSearchFilters"))
        .execute()
        .get();

XOR

Sintaksis:

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

Deskripsi:

Menampilkan logika XOR dari dua nilai boolean atau lebih.

Menampilkan NULL jika salah satu nilai yang diberikan adalah ABSENT atau NULL.

Contoh:

x y xor(x, y)
TRUE TRUE FALSE
FALSE FALSE FALSE
FALSE TRUE TRUE
NULL TRUE NULL
ABSENT TRUE NULL
NULL FALSE NULL
FALSE ABSENT NULL
Node.js
const result = await execute(db.pipeline()
  .collection("books")
  .select(
    xor(field("tags").arrayContains("magic"), field("tags").arrayContains("nonfiction"))
      .as("matchesSearchFilters")
  )
);

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    xor(field("tags").arrayContains("magic"), field("tags").arrayContains("nonfiction"))
      .as("matchesSearchFilters")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    (Field("tags").arrayContains("magic") ^ Field("tags").arrayContains("nonfiction"))
      .as("matchesSearchFilters")
  ])
  .execute()

Kotlin

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

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        Expression.xor(
            field("tags").arrayContains("magic"),
            field("tags").arrayContains("nonfiction")
        ).alias("matchesSearchFilters")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field, Xor

result = (
    client.pipeline()
    .collection("books")
    .select(
        Xor(
            [
                Field.of("tags").array_contains("magic"),
                Field.of("tags").array_contains("nonfiction"),
            ]
        ).as_("matchesSearchFilters")
    )
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(
            xor(
                    arrayContains(field("tags"), "magic"),
                    arrayContains(field("tags"), "nonfiction"))
                .as("matchesSearchFilters"))
        .execute()
        .get();

NOR

Sintaksis:

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

Deskripsi:

Menampilkan logika NOR dari dua atau lebih nilai boolean.

Menampilkan NULL jika hasilnya tidak dapat diperoleh karena salah satu nilai yang diberikan adalah ABSENT atau NULL.

Contoh:

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

Sintaksis:

not(x: BOOLEAN) -> BOOLEAN

Deskripsi:

Menampilkan logika NOT dari nilai boolean.

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

CONDITIONAL

Sintaksis:

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

Deskripsi:

Menghasilkan dan menampilkan true_case jika condition menghasilkan TRUE.

Menghasilkan dan menampilkan false_case jika kondisi di-resolve ke nilai FALSE, NULL, atau ABSENT.

Contoh:

condition true_case false_case conditional(condition, true_case, false_case)
TRUE 1L 0L 1L
FALSE 1L 0L 0L
NULL 1L 0L 0L
ABSENT 1L 0L 0L
Node.js
const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("tags").arrayConcat([
      field("pages").greaterThan(100)
        .conditional(constant("longRead"), constant("shortRead"))
    ]).as("extendedTags")
  )
);

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("tags").arrayConcat([
      field("pages").greaterThan(100)
        .conditional(constant("longRead"), constant("shortRead"))
    ]).as("extendedTags")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("tags").arrayConcat([
      ConditionalExpression(
        Field("pages").greaterThan(100),
        then: Constant("longRead"),
        else: Constant("shortRead")
      )
    ]).as("extendedTags")
  ])
  .execute()

Kotlin

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

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("tags").arrayConcat(
            Expression.conditional(
                field("pages").greaterThan(100),
                constant("longRead"),
                constant("shortRead")
            )
        ).alias("extendedTags")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import (
    Field,
    Constant,
    Conditional,
)

result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("tags")
        .array_concat(
            Conditional(
                Field.of("pages").greater_than(100),
                Constant.of("longRead"),
                Constant.of("shortRead"),
            )
        )
        .as_("extendedTags")
    )
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(
            arrayConcat(
                    field("tags"),
                    conditional(
                        greaterThan(field("pages"), 100),
                        constant("longRead"),
                        constant("shortRead")))
                .as("extendedTags"))
        .execute()
        .get();

IF_NULL

Sintaksis:

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

Deskripsi:

Menampilkan expr jika bukan NULL atau mengevaluasi dan menampilkan replacement. Ekspresi replacement tidak dievaluasi jika expr digunakan.

Contoh:

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

SWITCH_ON

Sintaksis:

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

Deskripsi:

Mengevaluasi serangkaian kondisi dan menampilkan hasil yang terkait dengan kondisi TRUE pertama. Jika tidak ada kondisi yang bernilai TRUE, nilai default akan ditampilkan jika diberikan. Jika tidak ada nilai default yang diberikan, error akan ditampilkan jika tidak ada kondisi lain yang bernilai TRUE.

Untuk memberikan nilai default, teruskan sebagai argumen terakhir sehingga jumlah argumen menjadi ganjil.

Contoh:

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

EQUAL_ANY

Sintaksis:

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

Deskripsi:

Menampilkan TRUE jika value ada dalam array search_space.

Contoh:

value search_space equal_any(value, search_space)
0L [1L, 2L, 3L] FALSE
2L [1L, 2L, 3L] TRUE
NULL [1L, 2L, 3L] FALSE
NULL [1L, NULL] TRUE
ABSENT [1L, NULL] FALSE
NaN [1L, NaN, 3L] TRUE
Node.js
const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("genre").equalAny(["Science Fiction", "Psychological Thriller"])
      .as("matchesGenreFilters")
  )
);

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("genre").equalAny(["Science Fiction", "Psychological Thriller"])
      .as("matchesGenreFilters")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("genre").equalAny(["Science Fiction", "Psychological Thriller"])
      .as("matchesGenreFilters")
  ])
  .execute()

Kotlin

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

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("genre").equalAny(Arrays.asList("Science Fiction", "Psychological Thriller"))
            .alias("matchesGenreFilters")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("genre")
        .equal_any(["Science Fiction", "Psychological Thriller"])
        .as_("matchesGenreFilters")
    )
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(
            equalAny(field("genre"), Arrays.asList("Science Fiction", "Psychological Thriller"))
                .as("matchesGenreFilters"))
        .execute()
        .get();

NOT_EQUAL_ANY

Sintaksis:

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

Deskripsi:

Menampilkan TRUE jika value tidak ada dalam array search_space.

Contoh:

value search_space not_equal_any(value, search_space)
0L [1L, 2L, 3L] TRUE
2L [1L, 2L, 3L] FALSE
NULL [1L, 2L, 3L] TRUE
NULL [1L, NULL] FALSE
ABSENT [1L, NULL] TRUE
NaN [1L, NaN, 3L] FALSE
Node.js
const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("author").notEqualAny(["George Orwell", "F. Scott Fitzgerald"])
      .as("byExcludedAuthors")
  )
);

Web

const result = await execute(db.pipeline()
  .collection("books")
  .select(
    field("author").notEqualAny(["George Orwell", "F. Scott Fitzgerald"])
      .as("byExcludedAuthors")
  )
);
Swift
let result = try await db.pipeline()
  .collection("books")
  .select([
    Field("author").notEqualAny(["George Orwell", "F. Scott Fitzgerald"])
      .as("byExcludedAuthors")
  ])
  .execute()

Kotlin

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

Java

Task<Pipeline.Snapshot> result = db.pipeline()
    .collection("books")
    .select(
        field("author").notEqualAny(Arrays.asList("George Orwell", "F. Scott Fitzgerald"))
            .alias("byExcludedAuthors")
    )
    .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field

result = (
    client.pipeline()
    .collection("books")
    .select(
        Field.of("author")
        .not_equal_any(["George Orwell", "F. Scott Fitzgerald"])
        .as_("byExcludedAuthors")
    )
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(
            notEqualAny(field("author"), Arrays.asList("George Orwell", "F. Scott Fitzgerald"))
                .as("byExcludedAuthors"))
        .execute()
        .get();

MAXIMUM

Sintaksis:

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

Deskripsi:

Menampilkan nilai maksimum yang bukan NULL dan bukan ABSENT dalam serangkaian nilai x.

Jika tidak ada nilai yang bukan NULL dan bukan ABSENT, NULL akan ditampilkan.

Jika ada beberapa nilai maksimum yang setara, salah satu nilai tersebut dapat ditampilkan. Pengurutan jenis nilai mengikuti pengurutan yang didokumentasikan.

Contoh:

x y maximum(x, y)
FALSE TRUE TRUE
FALSE -10L -10L
0.0 -5L 0.0
"foo" "bar" "foo"
"foo" ["foo"] ["foo"]
ABSENT ABSENT NULL
NULL NULL NULL
Node.js
const result = await execute(db.pipeline()
  .collection("books")
  .aggregate(field("price").maximum().as("maximumPrice"))
);

Web

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

Kotlin

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

Java

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

result = (
    client.pipeline()
    .collection("books")
    .select(Field.of("rating").logical_maximum(1).as_("flooredRating"))
    .execute()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .select(logicalMaximum(field("rating"), 1).as("flooredRating"))
        .execute()
        .get();

MINIMUM

Sintaksis:

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

Deskripsi:

Menampilkan nilai minimum yang bukan NULL dan bukan ABSENT dalam serangkaian nilai x.

Jika tidak ada nilai yang bukan NULL dan bukan ABSENT, NULL akan ditampilkan.

Jika ada beberapa nilai minimum yang setara, salah satu nilai tersebut dapat ditampilkan. Pengurutan jenis nilai mengikuti pengurutan yang didokumentasikan.

Contoh:

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

Fungsi Peta

Nama Deskripsi
MAP Membuat nilai peta dari serangkaian key-value pair
MAP_GET Menampilkan nilai dalam peta berdasarkan kunci yang ditentukan
MAP_SET Menampilkan salinan peta dengan serangkaian kunci yang diperbarui
MAP_REMOVE Menampilkan salinan peta dengan serangkaian kunci yang dihapus
MAP_MERGE Menggabungkan serangkaian peta.
CURRENT_CONTEXT Menampilkan konteks saat ini sebagai peta.
MAP_KEYS Menampilkan array semua kunci dalam peta.
MAP_VALUES Menampilkan array semua nilai dalam peta.
MAP_ENTRIES Menampilkan array key-value pair dari peta.

MAP

Sintaksis:

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

Deskripsi:

Membuat peta dari serangkaian key-value pair.

MAP_GET

Sintaksis:

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

Deskripsi:

Menampilkan nilai dalam peta berdasarkan kunci yang ditentukan. Menampilkan nilai ABSENT jika key tidak ada di peta, atau jika argumen map bukan MAP.

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

Web

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

Kotlin

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

Java

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

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

MAP_SET

Sintaksis:

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

Deskripsi:

Menampilkan salinan nilai map yang isinya telah diperbarui oleh serangkaian key-value pair.

Jika nilai yang diberikan di-resolve ke nilai kosong, kunci terkait akan dihapus dari peta.

Jika argumen map bukan MAP, nilai kosong akan ditampilkan.

MAP_REMOVE

Sintaksis:

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

Deskripsi:

Menampilkan salinan nilai map dengan serangkaian kunci yang dihapus.

MAP_MERGE

Sintaksis:

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

Menggabungkan isi 2 peta atau lebih. Jika beberapa peta memiliki nilai yang bertentangan, nilai terakhir akan digunakan.

CURRENT_CONTEXT

Sintaksis:

current_context() -> MAP

Menampilkan peta yang terdiri dari semua kolom yang tersedia di titik eksekusi saat ini.

MAP_KEYS

Sintaksis:

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

Deskripsi:

Menampilkan array yang berisi semua kunci dari nilai map.

MAP_VALUES

Sintaksis:

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

Deskripsi:

Menampilkan array yang berisi semua nilai dari nilai map.

MAP_ENTRIES

Sintaksis:

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

Deskripsi:

Menampilkan array yang berisi semua key-value pair dalam nilai map.

Setiap key-value pair akan berbentuk peta dengan dua entri, yakni k dan v.

Contoh:

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

Fungsi String

Nama Deskripsi
BYTE_LENGTH Menampilkan jumlah BYTES dalam nilai STRING atau BYTES
CHAR_LENGTH Menampilkan jumlah karakter unicode dalam nilai STRING
STARTS_WITH Menampilkan TRUE jika STRING diawali dengan awalan tertentu
ENDS_WITH Menampilkan TRUE jika STRING diakhiri dengan akhiran tertentu
LIKE Menampilkan TRUE jika STRING cocok dengan suatu pola
REGEX_CONTAINS Menampilkan TRUE jika nilai cocok sebagian atau sepenuhnya dengan ekspresi reguler
REGEX_MATCH Menampilkan TRUE jika ada bagian nilai yang cocok dengan ekspresi reguler
STRING_CONCAT Menyambungkan beberapa STRING menjadi satu STRING
STRING_CONTAINS Menampilkan TRUE jika nilai berisi STRING
STRING_INDEX_OF Menampilkan indeks berbasis 0 dari kemunculan pertama nilai STRING atau BYTES.
TO_UPPER Mengonversi nilai STRING atau BYTES menjadi huruf besar.
TO_LOWER Mengonversi nilai STRING atau BYTES menjadi huruf kecil.
SUBSTRING Mendapatkan substring dari nilai STRING atau BYTES.
STRING_REVERSE Membalikkan nilai STRING atau BYTES.
STRING_REPEAT Mengulang nilai STRING atau BYTES sesuai jumlah yang ditentukan.
STRING_REPLACE_ALL Mengganti semua kemunculan nilai STRING atau BYTES.
STRING_REPLACE_ONE Mengganti kemunculan pertama nilai STRING atau BYTES.
TRIM Memangkas karakter awal dan akhir dari nilai STRING atau BYTES.
LTRIM Memangkas karakter awal dari nilai STRING atau BYTES.
RTRIM Memangkas karakter akhir dari nilai STRING atau BYTES.
SPLIT Memisahkan nilai STRING atau BYTES menjadi array.

BYTE_LENGTH

Sintaksis:

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

Deskripsi:

Menampilkan jumlah BYTES dalam nilai STRING atau BYTES.

Contoh:

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

Web

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

Kotlin

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

Java

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

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

CHAR_LENGTH

Sintaksis:

char_length(value: STRING) -> INT64

Deskripsi:

Menampilkan jumlah poin kode unicode dalam nilai STRING.

Contoh:

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

Web

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

Kotlin

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

Java

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

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

STARTS_WITH

Sintaksis:

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

Deskripsi:

Menampilkan TRUE jika value diawali dengan prefix.

Contoh:

nilai awalan starts_with(value, prefix)
"abc" "a" true
"abc" "b" false
"abc" "" true
Node.js
const result = await db.pipeline()
  .collection("books")
  .select(
    field("title").startsWith("The")
      .as("needsSpecialAlphabeticalSort")
  )
  .execute();

Web

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

Kotlin

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

Java

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

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

ENDS_WITH

Sintaksis:

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

Deskripsi:

Menampilkan TRUE jika value diakhiri dengan postfix.

Contoh:

nilai postfix ends_with(value, postfix)
"abc" "c" true
"abc" "b" false
"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();

LIKE

Sintaksis:

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

Deskripsi:

Menampilkan TRUE jika value cocok dengan pattern.

Contoh:

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

Web

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

Kotlin

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

Java

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

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

REGEX_CONTAINS

Sintaksis:

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

Deskripsi:

Menampilkan TRUE jika sebagian dari value cocok dengan pattern. Jika pattern bukan ekspresi reguler yang valid, fungsi ini akan menampilkan error.

Ekspresi reguler mengikuti sintaksis library re2.

Contoh:

nilai pola regex_contains(value, pattern)
"Firestore" "Fire" true
"Firestore" "store$" true
"Firestore" "data" false
Node.js
const result = await db.pipeline()
  .collection("documents")
  .select(
    field("title").regexContains("Firestore (Enterprise|Standard)")
      .as("isFirestoreRelated")
  )
  .execute();

Web

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

Kotlin

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

Java

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

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

REGEX_MATCH

Sintaksis:

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

Deskripsi:

Menampilkan TRUE jika value cocok sepenuhnya dengan pattern. Jika pattern bukan ekspresi reguler yang valid, fungsi ini akan menampilkan error.

Ekspresi reguler mengikuti sintaksis library re2.

Contoh:

nilai pola regex_match(value, pattern)
"Firestore" "F.*store" true
"Firestore" "Fire" false
"Firestore" "^F.*e$" true
Node.js
const result = await db.pipeline()
  .collection("documents")
  .select(
    field("title").regexMatch("Firestore (Enterprise|Standard)")
      .as("isFirestoreExactly")
  )
  .execute();

Web

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

Kotlin

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

Java

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

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

STRING_CONCAT

Sintaksis:

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

Deskripsi:

Menyambungkan dua atau beberapa nilai STRING menjadi satu hasil.

Contoh:

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

Web

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

Kotlin

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

Java

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

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

STRING_CONTAINS

Sintaksis:

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

Deskripsi:

Memeriksa apakah value berisi String literal substring.

Contoh:

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

Web

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

Kotlin

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

Java

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

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

STRING_INDEX_OF

Sintaksis:

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

Deskripsi:

Menampilkan indeks berbasis 0 dari kemunculan pertama search dalam value.

  • Menampilkan -1 jika search tidak ditemukan.
  • Jika value adalah nilai STRING, hasilnya akan diukur dalam poin kode unicode. Jika berupa nilai BYTES, nilai tersebut akan diukur dalam byte.
  • Jika search adalah nilai STRING atau BYTES yang kosong, hasilnya adalah 0.

Contoh:

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

TO_UPPER

Sintaksis:

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

Deskripsi:

Mengonversi nilai STRING atau BYTES menjadi huruf besar.

Jika tidak sesuai dengan karakter alfabet huruf kecil UTF-8, byte atau karakter akan diteruskan tanpa diubah.

Contoh:

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

Web

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

Kotlin

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

Java

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

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

TO_LOWER

Sintaksis:

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

Deskripsi:

Mengonversi nilai STRING atau BYTES menjadi huruf kecil.

Jika tidak sesuai dengan karakter alfabet huruf besar UTF-8, byte atau karakter akan diteruskan tanpa diubah.

Contoh:

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

Web

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

Kotlin

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

Java

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

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

SUBSTRING

Sintaksis:

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

Deskripsi:

Menampilkan substring input yang dimulai dari position (indeks berbasis nol) dan mencakup hingga length entri. Jika tidak ada length yang diberikan, fungsi ini akan menampilkan substring dari position hingga akhir input.

  • Jika input adalah nilai STRING, position dan length akan diukur dalam poin kode unicode. Jika berupa nilai BYTES, nilai tersebut akan diukur dalam byte.

  • Jika position lebih besar dari panjang input, substring kosong akan ditampilkan. Jika position ditambah length lebih besar dari panjang input, substring akan dipangkas hingga akhir input.

  • Jika position negatif, posisi akan diambil dari akhir input. Jika position negatif lebih besar dari ukuran input, posisinya akan ditetapkan ke nol. length tidak boleh negatif.

Contoh:

Jika length tidak diberikan:

input posisi substring(input, position)
"abc" 0 "abc"
"abc" 1 "bc"
"abc" 3 ""
"abc" -1 "c"
b"abc" 1 b"bc"

Jika length diberikan:

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

Web

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

Kotlin

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

Java

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

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

STRING_REVERSE

Sintaksis:

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

Deskripsi:

Menampilkan input yang diberikan dalam urutan terbalik.

Karakter akan ditunjukkan dengan poin kode Unicode jika inputnya adalah STRING, dan ditunjukkan dengan byte jika inputnya adalah nilai BYTES.

Contoh:

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

Web

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

Kotlin

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

Java

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

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

STRING_REPEAT

Sintaksis:

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

Deskripsi:

Menampilkan input yang diulang sebanyak repetitions.

  • repetitions harus berupa bilangan bulat positif.
  • Jika repetitions adalah 0, fungsi ini akan menampilkan nilai kosong dengan jenis yang sama seperti input.
  • Jika hasilnya melebihi ukuran maksimum yang diizinkan (1 MB), error akan ditampilkan.

Contoh:

input repetisi string_repeat(input, repetitions)
"foo" 3 "foofoofoo"
"foo" 0 ""
"a " 3 "a a a "
b"ab" 2 b"abab"
"é🦆" 2 "é🦆é🦆"

STRING_REPLACE_ALL

Sintaksis:

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

Deskripsi:

Mengganti semua kemunculan find yang tidak tumpang tindih di input dengan replacement.

  • Kecocokan peka huruf besar/kecil.
  • Jika find kosong, tidak akan dilakukan penggantian.

Contoh:

input cari pengganti 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

Sintaksis:

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

Deskripsi:

Mengganti kemunculan pertama find di input dengan replacement.

  • Kecocokan peka huruf besar/kecil.
  • Jika find kosong, tidak akan dilakukan penggantian.

Contoh:

input cari pengganti string_replace_one(input, find, replacement)
"foobarfoo" "foo" "baz" "bazbarfoo"
"é" "é" "a" "a"
b"foobar" b"o" b"z" b"fzoobar"

TRIM

Sintaksis:

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

Deskripsi:

Memangkas sekumpulan BYTES atau CHARS yang ditentukan dari awal dan akhir input yang diberikan.

  • Jika tidak ada values_to_trim yang diberikan, fungsi ini akan memangkas karakter spasi kosong.

Contoh:

Jika values_to_trim tidak diberikan:

input 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"

Jika values_to_trim diberikan:

input values_to_trim trim(input, values_to_trim)
"abcbfooaacb" "abc" "foo"
"abcdaabadbac" "abc" "daabad"
b"C1C2C3" b"C1" b"C2C3"
b"C1C2" "foo" error
"foo" b"C1" error

Web

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

Kotlin

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

Java

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

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

LTRIM

Sintaksis:

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

Deskripsi:

Memangkas sekumpulan BYTES atau CHARS yang ditentukan di awal value yang diberikan.

  • Jika to_trim tidak diberikan, fungsi ini akan memangkas karakter spasi kosong di awal.

Contoh:

Jika to_trim tidak diberikan:

nilai ltrim(value)
" foo " "foo "
"foo" "foo"

Jika to_trim diberikan:

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

RTRIM

Sintaksis:

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

Deskripsi:

Memangkas sekumpulan BYTES atau CHARS yang ditentukan di akhir value yang diberikan.

  • Jika to_trim tidak diberikan, fungsi ini akan memangkas karakter spasi kosong di akhir.

Contoh:

Jika to_trim tidak diberikan:

nilai rtrim(value)
" foo " " foo"
"foo" "foo"

Jika to_trim diberikan:

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

SPLIT

Sintaksis:

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

Deskripsi:

Memisahkan nilai STRING atau BYTES, menggunakan pembatas.

  • Untuk STRING, pembatas defaultnya adalah koma ,. Pembatas diperlakukan sebagai string tunggal.

  • Untuk BYTES, Anda harus menentukan pembatas.

  • Jika melakukan pemisahan dengan pembatas kosong, hasilnya akan berupa array poin kode Unicode untuk nilai STRING, dan array BYTES untuk nilai BYTES.

  • Jika memisahkan STRING kosong, hasil yang akan ditampilkan adalah ARRAY dengan satu STRING kosong.

Contoh:

Jika delimiter tidak diberikan:

input split(input)
"foo,bar,foo" ["foo", "bar", "foo"]
"foo" ["foo"]
",foo," ["", "foo", ""]
"" [""]
b"C120C2C4" error

Jika delimiter diberikan:

input pembatas split(input, delimiter)
"foo bar foo" " " ["foo", "bar", "foo"]
"foo bar foo" "z" ["foo bar foo"]
"abc" "" ["a", "b", "c"]
b"C1,C2,C4" b"," [b"C1", b"C2", b"C4"]
b"ABC" b"" [b"A", b"B", b"C"]
"foo" b"C1" error

Fungsi Stempel Waktu

Nama Deskripsi
CURRENT_TIMESTAMP Menghasilkan TIMESTAMP yang sesuai dengan waktu permintaan.
TIMESTAMP_TRUNC Memangkas TIMESTAMP ke tingkat perincian tertentu.
UNIX_MICROS_TO_TIMESTAMP Mengonversi jumlah mikrodetik sejak 1970-01-01 00:00:00 UTC menjadi TIMESTAMP
UNIX_MILLIS_TO_TIMESTAMP Mengonversi jumlah milidetik sejak 1970-01-01 00:00:00 UTC menjadi TIMESTAMP
UNIX_SECONDS_TO_TIMESTAMP Mengonversi jumlah detik sejak 1970-01-01 00:00:00 UTC menjadi TIMESTAMP
TIMESTAMP_ADD Menambahkan interval waktu ke TIMESTAMP
TIMESTAMP_SUB Mengurangi interval waktu dari TIMESTAMP
TIMESTAMP_TO_UNIX_MICROS Mengonversi TIMESTAMP menjadi jumlah mikrodetik sejak 1970-01-01 00:00:00 UTC
TIMESTAMP_TO_UNIX_MILLIS Mengonversi TIMESTAMP menjadi jumlah milidetik sejak 1970-01-01 00:00:00 UTC
TIMESTAMP_TO_UNIX_SECONDS Mengonversi TIMESTAMP menjadi jumlah detik sejak 1970-01-01 00:00:00 UTC
TIMESTAMP_DIFF Menampilkan bilangan bulat dari interval unit yang ditentukan antara dua TIMESTAMP.
TIMESTAMP_EXTRACT Mengekstrak part tertentu (misalnya, tahun, bulan, hari) dari TIMESTAMP.

CURRENT_TIMESTAMP

Sintaksis:

current_timestamp() -> TIMESTAMP

Deskripsi:

Mendapatkan stempel waktu pada awal input waktu permintaan (diartikan sebagai jumlah mikrodetik sejak 1970-01-01 00:00:00 UTC).

Fungsi ini stabil dalam kueri dan akan selalu di-resolve ke nilai yang sama jika dipanggil beberapa kali.

TIMESTAMP_TRUNC

Sintaksis:

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

Deskripsi:

Memangkas stempel waktu hingga ke tingkat perincian tertentu.

Argumen granularity harus berupa string dan salah satu dari nilai berikut:

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

Jika argumen timezone diberikan, pemotongan akan mengikuti batas kalender pada zona waktu tersebut (misalnya, pemotongan harian akan dilakukan hingga tengah malam pada zona waktu yang ditentukan). Pemotongan akan mengikuti waktu musim panas.

Jika timezone tidak diberikan, pemotongan akan didasarkan pada batas kalender UTC.

Argumen timezone harus berupa representasi string zona waktu dari database tz, misalnya America/New_York. Selisih waktu kustom juga dapat digunakan dengan menentukan selisih dari GMT.

Contoh:

timestamp granularity timezone timestamp_trunc(timestamp, granularity, timezone)
2000-01-01 10:20:30:123456 UTC "second" Tidak tersedia 2001-01-01 10:20:30 UTC
1997-05-31 04:30:30 UTC "day" Tidak tersedia 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) Tidak tersedia 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

Sintaksis:

unix_micros_to_timestamp(input: INT64) -> TIMESTAMP

Deskripsi:

Mengonversi input (diartikan sebagai jumlah mikrodetik sejak 1970-01-01 00:00:00 UTC) menjadi TIMESTAMP. Menampilkan error jika input tidak dapat dikonversi menjadi TIMESTAMP yang valid.

Contoh:

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

Web

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

Kotlin

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

Java

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

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

UNIX_MILLIS_TO_TIMESTAMP

Sintaksis:

unix_millis_to_timestamp(input: INT64) -> TIMESTAMP

Deskripsi:

Mengonversi input (diartikan sebagai jumlah milidetik sejak 1970-01-01 00:00:00 UTC) menjadi TIMESTAMP. Menampilkan error jika input tidak dapat dikonversi menjadi TIMESTAMP yang valid.

Contoh:

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

Web

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

Kotlin

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

Java

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

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

UNIX_SECONDS_TO_TIMESTAMP

Sintaksis:

unix_seconds_to_timestamp(input: INT64) -> TIMESTAMP

Deskripsi:

Mengonversi input (diartikan sebagai jumlah detik sejak 1970-01-01 00:00:00 UTC) menjadi TIMESTAMP. Menampilkan error jika input tidak dapat dikonversi menjadi TIMESTAMP yang valid.

Contoh:

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

Web

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

Kotlin

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

Java

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

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

TIMESTAMP_ADD

Sintaksis:

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

Deskripsi:

Menambahkan amount unit dari timestamp. Argumen amount dapat bernilai negatif, yang dalam hal ini setara dengan TIMESTAMP_SUB.

Argumen unit harus berupa string dan salah satu dari nilai berikut:

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

Menampilkan error jika stempel waktu yang dihasilkan tidak sesuai dengan rentang TIMESTAMP.

Contoh:

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

Web

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

Kotlin

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

Java

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

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

TIMESTAMP_SUB

Sintaksis:

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

Deskripsi:

Mengurangi amount unit dari timestamp. Argumen amount dapat bernilai negatif, yang dalam hal ini setara dengan TIMESTAMP_ADD.

Argumen unit harus berupa string dan salah satu dari nilai berikut:

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

Menampilkan error jika stempel waktu yang dihasilkan tidak sesuai dengan rentang TIMESTAMP.

Contoh:

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

Web

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

Kotlin

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

Java

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

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

TIMESTAMP_TO_UNIX_MICROS

Sintaksis:

timestamp_to_unix_micros(input: TIMESTAMP) -> INT64

Deskripsi:

Mengonversi input menjadi jumlah mikrodetik sejak 1970-01-01 00:00:00 UTC. Mengurangi tingkat presisi yang lebih tinggi dengan melakukan pembulatan ke bawah ke awal mikrodetik.

Contoh:

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

Web

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

Kotlin

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

Java

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

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

TIMESTAMP_TO_UNIX_MILLIS

Sintaksis:

timestamp_to_unix_millis(input: TIMESTAMP) -> INT64

Deskripsi:

Mengonversi input menjadi jumlah milidetik sejak 1970-01-01 00:00:00 UTC. Mengurangi tingkat presisi yang lebih tinggi dengan melakukan pembulatan ke bawah ke awal milidetik.

Contoh:

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

Web

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

Kotlin

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

Java

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

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

TIMESTAMP_TO_UNIX_SECONDS

Sintaksis:

timestamp_to_unix_seconds(input: TIMESTAMP) -> INT64

Deskripsi:

Mengonversi input menjadi jumlah detik sejak 1970-01-01 00:00:00 UTC. Mengurangi tingkat presisi yang lebih tinggi dengan melakukan pembulatan ke bawah ke awal detik.

Contoh:

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

Web

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

Kotlin

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

Java

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

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

TIMESTAMP_DIFF

Sintaksis:

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

Deskripsi:

Menampilkan bilangan bulat dari interval unit yang ditentukan antara dua TIMESTAMP.

  • Menampilkan nilai negatif jika end mendahului start.
  • Memangkas satuan pecahan. Misalnya, timestamp_diff("2021-01-01 00:00:01", "2021-01-01 00:00:00", "minute") akan menampilkan 0.

Argumen unit harus berupa string dan salah satu dari nilai berikut:

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

Contoh:

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

Sintaksis:

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

Deskripsi:

Mengekstrak part tertentu (misalnya, tahun, bulan, hari) dari timestamp.

Argumen part harus berupa string dan salah satu dari nilai berikut:

  • microsecond
  • millisecond
  • second
  • minute
  • hour
  • day
  • dayofweek: Menampilkan nilai antara 1 (Minggu) dan 7 (Sabtu).
  • dayofyear
  • week: Menampilkan nomor minggu dalam setahun, dimulai dari 1 untuk hari Minggu pertama dalam setahun.
  • week([weekday]): Menampilkan nomor minggu dalam setahun, dimulai pada weekday yang ditentukan.
  • month
  • quarter
  • year
  • isoweek: Menampilkan nomor minggu ISO 8601.
  • isoyear: Menampilkan tahun penomoran minggu ISO 8601.

Jika argumen timezone diberikan, ekstraksi akan didasarkan pada kalender zona waktu yang diberikan. Ekstraksi akan mengikuti waktu musim panas.

Jika timezone tidak diberikan, ekstraksi akan didasarkan pada UTC.

Argumen timezone harus berupa representasi string zona waktu dari database zona waktu, misalnya America/New_York. Selisih waktu kustom juga dapat digunakan dengan menentukan selisih dari GMT.

Contoh:

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

Fungsi Type

Nama Deskripsi
TYPE Menampilkan jenis nilai sebagai STRING.
IS_TYPE Menampilkan true jika nilai cocok dengan jenis yang ditentukan.

TYPE

Sintaksis:

type(input: ANY) -> STRING

Deskripsi:

Menampilkan representasi string dari jenis input.

Jika diberi nilai kosong, fungsi ini akan menampilkan NULL.

Contoh:

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

Contoh klien

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

Web

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

Kotlin

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

Java

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

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

IS_TYPE

Sintaksis:

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

Deskripsi:

Menampilkan true jika input cocok dengan type yang ditentukan atau false jika sebaliknya. Jika diberi input kosong, fungsi ini akan menampilkan NULL.

String type yang didukung adalah:

  • "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"

Contoh:

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

Fungsi Vektor

Nama Deskripsi
COSINE_DISTANCE Menampilkan jarak kosinus antara dua vektor
DOT_PRODUCT Menampilkan perkalian titik antara dua vektor
EUCLIDEAN_DISTANCE Menampilkan jarak euclidean antara dua vektor
MANHATTAN_DISTANCE Menampilkan jarak manhattan antara dua vektor
VECTOR_LENGTH Menampilkan jumlah elemen dalam vektor

COSINE_DISTANCE

Sintaksis:

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

Deskripsi:

Menampilkan jarak kosinus antara x dan y.

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

Web

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

Kotlin

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

Java

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

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

DOT_PRODUCT

Sintaksis:

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

Deskripsi:

Menampilkan perkalian titik x dan y.

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

Web

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

Kotlin

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

Java

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

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

EUCLIDEAN_DISTANCE

Sintaksis:

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

Deskripsi:

Menghitung jarak euclidean antara x dan y.

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

Web

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

Kotlin

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

Java

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

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

MANHATTAN_DISTANCE

Sintaksis:

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

Deskripsi:

Menghitung jarak manhattan antara x dan y.

VECTOR_LENGTH

Sintaksis:

vector_length(vector: VECTOR) -> INT64

Deskripsi:

Menampilkan jumlah elemen dalam 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();