Агрегатные функции

Совокупность

Все агрегатные функции могут использоваться в качестве выражений верхнего уровня на этапе 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 .

Порядок элементов в выходном массиве нестабилен, и на него не следует полагаться.