Совокупность
Все агрегатные функции могут использоваться в качестве выражений верхнего уровня на этапе 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() -> INT64
count(expression: ANY) -> INT64
Описание:
Возвращает количество документов с предыдущего этапа, в которых expression принимает любое NULL значение. Если expression не указано, возвращает общее количество документов с предыдущего этапа.
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")) );
Быстрый
// 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
Синтаксис:
count_if(expression: BOOLEAN) -> INT64
Описание:
Возвращает количество документов из предыдущего этапа, в которых expression принимает значение TRUE .
Web
const result = await execute(db.pipeline() .collection("books") .aggregate( field("rating").greaterThan(4).countIf().as("filteredCount") ) );
Быстрый
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
Синтаксис:
count_distinct(expression: ANY) -> INT64
Описание:
Возвращает количество уникальных значений expression , не являющихся NULL и не являющихся ABSENT .
Web
const result = await execute(db.pipeline() .collection("books") .aggregate(field("author").countDistinct().as("unique_authors")) );
Быстрый
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(expression: ANY) -> NUMBER
Описание:
Возвращает сумму всех числовых значений, игнорируя нечисловые. Возвращает NaN если хотя бы одно значение является NaN .
Выходные данные будут иметь тот же тип, что и входные данные самого широкого типа, за исключением следующих случаев:
- Если
INTEGERне может быть представлен какINTEGER, он будет преобразован в тип данныхDOUBLE.
Web
const result = await execute(db.pipeline() .collection("cities") .aggregate(field("population").sum().as("totalPopulation")) );
Быстрый
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() )
СРЕДНИЙ
Синтаксис:
average(expression: ANY) -> FLOAT64
Описание:
Возвращает среднее значение для всех числовых значений, игнорируя нечисловые. Если какое-либо значение равно NaN , результат будет NaN , а если числовые значения не суммированы, результат будет NULL .
Выходные данные будут иметь тот же тип, что и входные, за исключением следующих случаев:
- Если
INTEGERне может быть представлен какINTEGER, он будет преобразован в тип данныхDOUBLE.
Web
const result = await execute(db.pipeline() .collection("cities") .aggregate(field("population").average().as("averagePopulation")) );
Быстрый
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(expression: ANY) -> ANY
Описание:
Возвращает минимальное NULL (неотсутствующее) значение expression при его оценке для каждого документа.
Если отсутствуют значения, отличные от NULL , возвращается NULL . Это относится и к случаям, когда документы не рассматриваются.
Если существует несколько минимальных эквивалентных значений, может быть возвращено любое из этих значений. Порядок типов значений соответствует документированному порядку .
Web
const result = await execute(db.pipeline() .collection("books") .aggregate(field("price").minimum().as("minimumPrice")) );
Быстрый
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(expression: ANY) -> ANY
Описание:
Возвращает максимальное NULL (неотсутствующее) значение expression при его оценке для каждого документа.
Если отсутствуют значения, отличные от NULL , возвращается NULL . Это относится и к случаям, когда документы не рассматриваются.
Если существует несколько максимальных эквивалентных значений, может быть возвращено любое из этих значений. Порядок типов значений соответствует документированному порядку .
Web
const result = await execute(db.pipeline() .collection("books") .aggregate(field("price").maximum().as("maximumPrice")) );
Быстрый
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(expression: ANY) -> ANY
Описание:
Возвращает значение expression для первого возвращенного документа.
ПОСЛЕДНИЙ
Синтаксис:
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 .
Порядок элементов в выходном массиве нестабилен, и на него не следует полагаться.