Fungsi agregat

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.

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

COUNT_IF

Sintaksis:

count_if(expression: BOOLEAN) -> INT64

Deskripsi:

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

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

COUNT_DISTINCT

Sintaksis:

count_distinct(expression: ANY) -> INT64

Deskripsi:

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

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

SUM

Sintaksis:

sum(expression: ANY) -> NUMBER

Deskripsi:

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

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

  • INTEGER akan dikonversi menjadi DOUBLE jika tidak dapat direpresentasikan sebagai INTEGER.

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

RATA-RATA

Sintaksis:

average(expression: ANY) -> FLOAT64

Deskripsi:

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

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

  • INTEGER akan dikonversi menjadi DOUBLE jika tidak dapat direpresentasikan sebagai INTEGER.

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

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.

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

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.

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

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.