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:
INTEGERakan dikonversi menjadiDOUBLEjika tidak dapat direpresentasikan sebagaiINTEGER.
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:
INTEGERakan dikonversi menjadiDOUBLEjika tidak dapat direpresentasikan sebagaiINTEGER.
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
NULLjika salah satu parameter inputnya adalahNULL. - Menghasilkan
NaNjika salah satu argumennya adalahNaN. - 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
INT32atauINT64.
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
errorjikaybernilai nol untuk jenis bilangan bulat (INT64). - Menampilkan
NaNjikaybernilai 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
numberyang diberikan, angka akan dibulatkan ke nilai bilangan bulat terdekat. - Jika nilainya tepat di tengah, pembulatan dilakukan menjauhi nol.
errorditampilkan jika pembulatan dengan nilaiplacesnegatif 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
numberyang diberikan, memangkas angka ke nilai bilangan bulat terdekat menuju nol. errorditampilkan 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 <= 0danexponentbernilai 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
errorjikanumberbernilai 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
numberyang diberikan, fungsi ini akan menampilkan logaritmanumberdenganbase(sama denganln(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
NULLdalam 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,predicatedievaluasi. Jika menampilkantrue, elemen disertakan dalam hasil; jika tidak (apabila menampilkanfalseataunull), elemen akan dihilangkan. - Jika
predicatedievaluasi 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
indexbernilai negatif, elemen akan diakses dari akhir array, dengan-1sebagai elemen terakhir. - Jika
arraybukan berjenisARRAYdan bukannull, fungsi ini akan menampilkan error. - Jika
indexberada di luar batas, fungsi ini akan menampilkan nilai kosong. - Jika
indexbukan berjenisINT64, 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
arraykosong, 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
nbernilai 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
arraykosong, 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
nbernilai 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
offsetbernilai negatif, fungsi ini akan menunjukkan posisi awal dari akhir array, dengan-1sebagai elemen terakhir. - Jika
lengthlebih besar daripada jumlah elemen yang tersisa dalam array setelahoffset, hasilnya akan diperluas hingga akhir array. lengthtidak 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.
expressiondapat berupa fungsi unaryelement -> result, atau fungsi biner(element, index) -> result.- Jika
expressionbersifat unary, fungsi ini dipanggil dengan setiap elemenarray. - Jika
expressionadalah biner, maka akan dipanggil dengan setiap elemenarraydan 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
NULLakan diabaikan selama perbandingan. - Jika
arraykosong atau hanya berisi nilaiNULL, fungsi ini akan menampilkanNULL.
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
NULLakan diabaikan. - Jika
nbernilai 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
NULLakan diabaikan selama perbandingan. - Jika
arraykosong atau hanya berisi nilaiNULL, fungsi ini akan menampilkanNULL.
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
NULLakan diabaikan. - Jika
nbernilai 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 menampilkanNaN. - 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, dannull_textharus memiliki jenis yang sama; semuanya harus berupaSTRINGatauBYTES. - Jika
null_textdiberikan, semua nilaiNULLdalamarrayakan diganti dengannull_text. - Jika
null_texttidak diberikan, nilaiNULLdalamarrayakan 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:
1Ljikaxlebih besar dariy.-1Ljikaxkurang dariy.0Ldalam 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
-1jikasearchtidak ditemukan. - Jika
valueadalah nilaiSTRING, hasilnya akan diukur dalam poin kode unicode. Jika berupa nilaiBYTES, nilai tersebut akan diukur dalam byte. - Jika
searchadalah nilaiSTRINGatauBYTESyang kosong, hasilnya adalah0.
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
inputadalah nilaiSTRING,positiondanlengthakan diukur dalam poin kode unicode. Jika berupa nilaiBYTES, nilai tersebut akan diukur dalam byte.Jika
positionlebih besar dari panjanginput, substring kosong akan ditampilkan. Jikapositionditambahlengthlebih besar dari panjanginput, substring akan dipangkas hingga akhirinput.Jika
positionnegatif, posisi akan diambil dari akhir input. Jikapositionnegatif lebih besar dari ukuran input, posisinya akan ditetapkan ke nol.lengthtidak 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.
repetitionsharus berupa bilangan bulat positif.- Jika
repetitionsadalah0, fungsi ini akan menampilkan nilai kosong dengan jenis yang sama sepertiinput. - 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
findkosong, 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
findkosong, 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_trimyang 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_trimtidak 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_trimtidak 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 arrayBYTESuntuk nilaiBYTES.Jika memisahkan
STRINGkosong, hasil yang akan ditampilkan adalahARRAYdengan satuSTRINGkosong.
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:
microsecondmillisecondsecondminutehourdayweekweek([weekday])monthquarteryearisoyear
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:
microsecondmillisecondsecondminutehourday
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:
microsecondmillisecondsecondminutehourday
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
endmendahuluistart. - Memangkas satuan pecahan. Misalnya,
timestamp_diff("2021-01-01 00:00:01", "2021-01-01 00:00:00", "minute")akan menampilkan0.
Argumen unit harus berupa string dan salah satu dari nilai berikut:
microsecondmillisecondsecondminutehourday
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:
microsecondmillisecondsecondminutehourdaydayofweek: Menampilkan nilai antara 1 (Minggu) dan 7 (Sabtu).dayofyearweek: Menampilkan nomor minggu dalam setahun, dimulai dari 1 untuk hari Minggu pertama dalam setahun.week([weekday]): Menampilkan nomor minggu dalam setahun, dimulai padaweekdayyang ditentukan.monthquarteryearisoweek: 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();