Aggregatfunktionen

Aggregate

Alle Aggregatfunktionen können als Ausdrücke der obersten Ebene in der aggregate(...)-Phase verwendet werden.

Name Beschreibung
COUNT Gibt die Anzahl der Dokumente zurück.
COUNT_IF Gibt die Anzahl der Dokumente zurück, in denen ein Ausdruck zu TRUE ausgewertet wird.
COUNT_DISTINCT Gibt die Anzahl der eindeutigen Werte zurück, die nicht NULL sind.
SUM Gibt die Summe aller NUMERIC-Werte zurück.
AVERAGE Gibt den Durchschnitt aller NUMERIC-Werte zurück.
MINIMUM Gibt den Mindestwert ungleich NULL zurück.
MAXIMUM Gibt den maximalen Wert ungleich NULL zurück.
FIRST Gibt den expression-Wert für das erste Dokument zurück.
LAST Gibt den expression-Wert für das letzte Dokument zurück.
ARRAY_AGG Gibt ein Array mit allen Eingabewerten zurück.
ARRAY_AGG_DISTINCT Gibt ein Array mit allen eindeutigen Eingabewerten zurück.

COUNT

Syntax:

count() -> INT64
count(expression: ANY) -> INT64

Beschreibung:

Gibt die Anzahl der Dokumente aus der vorherigen Phase zurück, in denen expression als beliebiger Wert außer NULL ausgewertet wird. Wenn kein expression angegeben ist, wird die Gesamtzahl der Dokumente aus der vorherigen Phase zurückgegeben.

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

Syntax:

count_if(expression: BOOLEAN) -> INT64

Beschreibung:

Gibt die Anzahl der Dokumente aus der vorherigen Phase zurück, in denen expression als TRUE ausgewertet wird.

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

Syntax:

count_distinct(expression: ANY) -> INT64

Beschreibung:

Gibt die Anzahl der eindeutigen Nicht-NULL-, Nicht-ABSENT-Werte von expression zurück.

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

Syntax:

sum(expression: ANY) -> NUMBER

Beschreibung:

Gibt die Summe aller numerischen Werte zurück, wobei nicht numerische Werte ignoriert werden. Gibt NaN zurück, wenn einer der Werte NaN ist.

Die Ausgabe hat denselben Typ wie der breiteste Eingabetyp, außer in den folgenden Fällen:

  • Ein INTEGER wird in ein DOUBLE konvertiert, wenn es nicht als INTEGER dargestellt werden kann.

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

AVERAGE

Syntax:

average(expression: ANY) -> FLOAT64

Beschreibung:

Gibt den Durchschnitt aller numerischen Werte zurück, wobei nicht numerische Werte ignoriert werden. Wird mit NaN ausgewertet, wenn ein Wert NaN ist, oder mit NULL, wenn keine numerischen Werte aggregiert werden.

Die Ausgabe hat denselben Typ wie der Eingabetyp, außer in den folgenden Fällen:

  • Ein INTEGER wird in ein DOUBLE konvertiert, wenn es nicht als INTEGER dargestellt werden kann.

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

Syntax:

minimum(expression: ANY) -> ANY

Beschreibung:

Gibt den Mindestwert ungleich NULL und nicht „nicht vorhanden“ von expression zurück, wenn er für jedes Dokument ausgewertet wird.

Wenn es keine Werte gibt, die nicht NULL oder nicht „absent“ sind, wird NULL zurückgegeben. Das gilt auch, wenn keine Dokumente berücksichtigt werden.

Wenn es mehrere gleichwertige Mindestwerte gibt, kann ein beliebiger dieser Werte zurückgegeben werden. Die Werttypsortierung folgt der dokumentierten Sortierung.

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

Syntax:

maximum(expression: ANY) -> ANY

Beschreibung:

Gibt den maximalen Wert ungleich NULL und nicht „nicht vorhanden“ von expression zurück, wenn er für jedes Dokument ausgewertet wird.

Wenn es keine Werte gibt, die nicht NULL oder nicht „absent“ sind, wird NULL zurückgegeben. Das gilt auch, wenn keine Dokumente berücksichtigt werden.

Wenn es mehrere maximale äquivalente Werte gibt, kann ein beliebiger dieser Werte zurückgegeben werden. Die Werttypsortierung folgt der dokumentierten Sortierung.

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

Syntax:

first(expression: ANY) -> ANY

Beschreibung:

Gibt den Wert von expression für das erste zurückgegebene Dokument zurück.

LAST

Syntax:

last(expression: ANY) -> ANY

Beschreibung:

Gibt den Wert von expression für das zuletzt zurückgegebene Dokument zurück.

ARRAY_AGG

Syntax:

array_agg(expression: ANY) -> ARRAY<ANY>

Beschreibung:

Gibt ein Array mit allen Werten von expression zurück, wenn es für jedes Dokument ausgewertet wird.

Wenn der Ausdruck in einen fehlenden Wert aufgelöst wird, wird er in NULL konvertiert.

Die Reihenfolge der Elemente im Ausgabearray ist nicht stabil und sollte nicht berücksichtigt werden.

ARRAY_AGG_DISTINCT

Syntax:

array_agg_distinct(expression: ANY) -> ARRAY<ANY>

Beschreibung:

Gibt ein Array mit allen eindeutigen Werten von expression zurück, wenn es für jedes Dokument ausgewertet wird.

Wenn der Ausdruck in einen fehlenden Wert aufgelöst wird, wird er in NULL konvertiert.

Die Reihenfolge der Elemente im Ausgabearray ist nicht stabil und sollte nicht berücksichtigt werden.