匯總
所有匯總函式都可以在 aggregate(...) 階段中做為頂層運算式使用。
| 名稱 | 說明 |
COUNT
|
傳回文件數量。 |
COUNT_IF
|
傳回運算式評估結果為 TRUE 的文件數 |
COUNT_DISTINCT
|
傳回不重複的非 NULL 值數量
|
SUM
|
傳回所有 NUMERIC 值的總和
|
AVERAGE
|
傳回所有 NUMERIC 值的平均值
|
MINIMUM
|
傳回非 NULL 的最小值
|
MAXIMUM
|
傳回非 NULL 的最大值
|
FIRST
|
傳回第一個文件的 expression 值。
|
LAST
|
傳回最後一個文件的 expression 值。
|
ARRAY_AGG
|
傳回所有輸入值的陣列。 |
ARRAY_AGG_DISTINCT
|
傳回所有不重複的輸入值所組成的陣列。 |
COUNT
語法:
count() -> INT64
count(expression: ANY) -> INT64
說明:
傳回先前階段的文件計數,其中 expression 評估為任何非 NULL 值。如未提供 expression,則會傳回前一階段的文件總數。
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&q"count")) .execute();test.firestore.js
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(&quocount().as("count")) );test.firestore.js
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&q;count")]) .execute()PipelineSnippets.swift
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("ratins("count")) .execute()DocSnippets.kt
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 T>askPipeline.Snapshot countField = db.pipeline() .collection("books") .aggregate(AggregateFunction.count("ratingquot;count")) .execute();DocSnippets.java
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("ratinunt")) .execute() )firestore_pipelines.py
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(&quo .execute() .get();PipelineSnippets.java
COUNT_IF
語法:
count_if(expression: BOOLEAN) -> INT64
說明:
傳回先前階段中,expression 評估為 TRUE 的文件數量。
Node.js
const result = await db.pipeline() .collection("books") .aggregate( field("rating").greaterThan(4).countIf().as("filtered .execute();test.firestore.js
Web
const result = await execute(db.pipeline() .collection("books") .aggregate( field("rating").greaterThan(4).countIf().as(&ququot;) ) );test.firestore.js
Swift
let result = try await db.pipeline() .collection("books") .aggregate([ AggregateFunction("count_if", [Field("rating").greaterThan(4)]).as(&quo ]) .execute()PipelineSnippets.swift
Kotlin
val result = db.pipeline() .collection("books") .aggregate( AggregateFunction.countIf(field("rating").greaterThan(4)).alias("filteredCou) .execute()DocSnippets.kt
Java
Task<Pipeline.Snapshot> result = db.pipeline() .collection("books") .aggregate( AggregateFunction.countIf(field("rating").greaterThan(4)).alias("filteredCoun .execute();DocSnippets.java
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_("filteredcute() )firestore_pipelines.py
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .aggregate(countIf(field("rating").greaterThan(4)).as("filteredCount")) .get();PipelineSnippets.java
COUNT_DISTINCT
語法:
count_distinct(expression: ANY) -> INT64
說明:
傳回 expression 的不重複非 NULL、非 ABSENT 值數量。
Node.js
const result = await db.pipeline() .collection("books") .aggregate(field("author").countDistinct().as("unique .execute();test.firestore.js
Web
const result = await execute(db.pipeline() .collection("books") .aggregate(field("author").countDistinct().as(&rs")) );test.firestore.js
Swift
let result = try await db.pipeline() .collection("books") .aggregate([AggregateFunction("count_distinct", [Field("author")]).as(&qt;)]) .execute()PipelineSnippets.swift
Kotlin
val result = db.pipeline() .collection("books") .aggregate(AggregateFunction.countDistinct("author").alias("unique_) .execute()DocSnippets.kt
Java
Task<Pipeline.Snapshot> result = db.pipeline() .collection("books") .aggregate(AggregateFunction.countDistinct("author").alias("unique_a .execute();DocSnippets.java
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .aggregate(Field.of("author").count_distinct().as_("unique_aucute() )firestore_pipelines.py
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .aggregate(countDistinct("author").as("unique_authors")) .get();PipelineSnippets.java
SUM
語法:
sum(expression: ANY) -> NUMBER
說明:
傳回所有數值的總和,並忽略非數值。如果任何值為 NaN,則傳回 NaN。
輸出內容的型別會與最寬的輸入型別相同,但下列情況除外:
- 如果
INTEGER無法表示為INTEGER,系統會將其轉換為DOUBLE。
Node.js
const result = await db.pipeline() .collection("cities") .aggregate(field("population").sum().as("totalPo .execute();test.firestore.js
Web
const result = await execute(db.pipeline() .collection("cities") .aggregate(field("population").sum().as(&qon")) );test.firestore.js
Swift
let result = try await db.pipeline() .collection("cities") .aggregate([Field("population").sum().as("totalPoxecute()PipelineSnippets.swift
Kotlin
val result = db.pipeline() .collection("cities") .aggregate(AggregateFunction.sum("population").alias("totalPop) .execute()DocSnippets.kt
Java
Task<Pipeline.Snapshot> result = db.pipeline() .collection("cities") .aggregate(AggregateFunction.sum("population").alias("totalPopu .execute();DocSnippets.java
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("cities") .aggregate(Field.of("population").sum().as_("totalPopulcute() )firestore_pipelines.py
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("cities") .aggregate(sum("population").as("totalPopulation")) .get();PipelineSnippets.java
AVERAGE
語法:
average(expression: ANY) -> FLOAT64
說明:
傳回所有數值的平均值,並忽略非數值。
如果任何值為 NaN,則評估結果為 NaN;如果沒有任何數值匯總,則評估結果為 NULL。
輸出內容的型別會與輸入型別相同,但下列情況除外:
- 如果
INTEGER無法表示為INTEGER,系統會將其轉換為DOUBLE。
Node.js
const result = await db.pipeline() .collection("cities") .aggregate(field("population").average().as("averagePo .execute();test.firestore.js
Web
const result = await execute(db.pipeline() .collection("cities") .aggregate(field("population").average().as(&quoon")) );test.firestore.js
Swift
let result = try await db.pipeline() .collection("cities") .aggregate([Field("population").average().as("averagePoxecute()PipelineSnippets.swift
Kotlin
val result = db.pipeline() .collection("cities") .aggregate(AggregateFunction.average("population").alias("averagePop) .execute()DocSnippets.kt
Java
Task<Pipeline.Snapshot> result = db.pipeline() .collection("cities") .aggregate(AggregateFunction.average("population").alias("averagePopu .execute();DocSnippets.java
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("cities") .aggregate(Field.of("population").average().as_("averagePopulcute() )firestore_pipelines.py
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("cities") .aggregate(average("population").as("averagePopulation")) .get();PipelineSnippets.java
最低
語法:
minimum(expression: ANY) -> ANY
說明:
針對每個文件評估 expression 時,傳回最小的非 NULL 值和非缺席值。
如果沒有非 NULL、非缺少的任何值,則會傳回 NULL。包括未考慮任何文件的情況。
如果有多個最小值,系統可以傳回其中任一值。值類型排序方式遵循文件排序方式。
Node.js
const result = await db.pipeline() .collection("books") .aggregate(field("price").minimum().as("mini .execute();test.firestore.js
Web
const result = await execute(db.pipeline() .collection("books") .aggregate(field("price").minimum().asce")) );test.firestore.js
Swift
let result = try await db.pipeline() .collection("books") .aggregate([Field("price").minimum().as("minixecute()PipelineSnippets.swift
Kotlin
val result = db.pipeline() .collection("books") .aggregate(AggregateFunction.minimum("price").alias("minim) .execute()DocSnippets.kt
Java
Task<Pipeline.Snapshot> result = db.pipeline() .collection("books") .aggregate(AggregateFunction.minimum("price").alias("minimu .execute();DocSnippets.java
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .aggregate(Field.of("price").minimum().as_("minimumcute() )firestore_pipelines.py
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .aggregate(minimum("price").as("minimumPrice")) .get();PipelineSnippets.java
MAXIMUM
語法:
maximum(expression: ANY) -> ANY
說明:
針對每個文件評估 expression 時,傳回 expression 的最大非 NULL 值 (非缺席值)。
如果沒有非 NULL、非缺少的任何值,則會傳回 NULL。包括未考慮任何文件的情況。
如果有多個最大等值,則可以傳回其中任何一個值。值類型排序方式遵循文件排序方式。
Node.js
const result = await db.pipeline() .collection("books") .aggregate(field("price").maximum().as("maxi .execute();test.firestore.js
Web
const result = await execute(db.pipeline() .collection("books") .aggregate(field("price").maximum().asce")) );test.firestore.js
Swift
let result = try await db.pipeline() .collection("books") .aggregate([Field("price").maximum().as("maxixecute()PipelineSnippets.swift
Kotlin
val result = db.pipeline() .collection("books") .aggregate(AggregateFunction.maximum("price").alias("maxim) .execute()DocSnippets.kt
Java
Task<Pipeline.Snapshot> result = db.pipeline() .collection("books") .aggregate(AggregateFunction.maximum("price").alias("maximu .execute();DocSnippets.java
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .aggregate(Field.of("price").maximum().as_("maximumcute() )firestore_pipelines.py
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .aggregate(maximum("price").as("maximumPrice")) .get();PipelineSnippets.java
FIRST
語法:
first(expression: ANY) -> ANY
說明:
傳回第一個傳回的文件中 expression 的值。
LAST
語法:
last(expression: ANY) -> ANY
說明:
傳回最後一個傳回的文件中 expression 的值。
ARRAY_AGG
語法:
array_agg(expression: ANY) -> ARRAY<ANY>
說明:
針對每份文件評估時,傳回包含所有 expression 值的陣列。
如果運算式解析為缺席值,則會轉換為 NULL。
輸出陣列中的元素順序不穩定,不應依賴。
ARRAY_AGG_DISTINCT
語法:
array_agg_distinct(expression: ANY) -> ARRAY<ANY>
說明:
針對每份文件評估時,傳回包含所有不重複 expression 值的陣列。
如果運算式解析為缺席值,則會轉換為 NULL。
輸出陣列中的元素順序不穩定,不應依賴。