Aggregatfunktionen

Aggregate

Alle Aggregatfunktionen können in der aggregate(...) Phase als Ausdrücke der obersten Ebene 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 als TRUE ausgewertet wird.
COUNT_DISTINCT Gibt die Anzahl der eindeutigen Nicht-NULL-Werte zurück.
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 Höchstwert ungleich NULL zurück.
FIRST Gibt den expression Wert für das erste Dokument zurück.
LAST Gibt den Wert von expression für das letzte Dokument zurück.
ARRAY_AGG Gibt ein Array aller Eingabewerte zurück.
ARRAY_AGG_DISTINCT Gibt ein Array aller eindeutigen Eingabewerte 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 ein beliebiger Wert ungleich NULL ausgewertet wird. Wenn kein expression angegeben wird, wird die Gesamtzahl der Dokumente aus der vorherigen Phase zurückgegeben.

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").count().as("count"))
  .execute();

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()
)
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("count"))
        .execute()
        .get();

COUNT_IF

Syntax :

count_if(expression: BOOLEAN) -> INT64

Beschreibung:

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

Node.js
const result = await db.pipeline()
  .collection("books")
  .aggregate(
    field("rating").greaterThan(4).countIf().as("filteredCount")
  )
  .execute();

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()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .aggregate(countIf(field("rating").greaterThan(4)).as("filteredCount"))
        .execute()
        .get();

COUNT_DISTINCT

Syntax :

count_distinct(expression: ANY) -> INT64

Beschreibung:

Gibt die Anzahl der eindeutigen Werte von expression zurück, die nicht NULL und nicht ABSENT sind.

Node.js
const result = await db.pipeline()
  .collection("books")
  .aggregate(field("author").countDistinct().as("unique_authors"))
  .execute();

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()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .aggregate(countDistinct("author").as("unique_authors"))
        .execute()
        .get();

SUM

Syntax :

sum(expression: ANY) -> NUMBER

Beschreibung:

Gibt die Summe aller numerischen Werte zurück und ignoriert nicht numerische Werte. Wird zurückgegeben NaN, wenn einer der Werte NaN ist.

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

  • Ein INTEGER-Wert wird in einen DOUBLE-Wert konvertiert, wenn er nicht als INTEGER dargestellt werden kann.
Node.js
const result = await db.pipeline()
  .collection("cities")
  .aggregate(field("population").sum().as("totalPopulation"))
  .execute();

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()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("cities")
        .aggregate(sum("population").as("totalPopulation"))
        .execute()
        .get();

AVERAGE

Syntax :

average(expression: ANY) -> FLOAT64

Beschreibung:

Gibt den Durchschnitt aller numerischen Werte zurück und ignoriert nicht numerische Werte. Wird als NaN ausgewertet, wenn einer der Werte NaN ist, oder als NULL wenn keine numerischen Werte aggregiert werden.

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

  • Ein INTEGER-Wert wird in einen DOUBLE-Wert konvertiert, wenn er nicht als INTEGER dargestellt werden kann.
Node.js
const result = await db.pipeline()
  .collection("cities")
  .aggregate(field("population").average().as("averagePopulation"))
  .execute();

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()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("cities")
        .aggregate(average("population").as("averagePopulation"))
        .execute()
        .get();

MINIMUM

Syntax :

minimum(expression: ANY) -> ANY

Beschreibung:

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

Wenn keine Werte vorhanden sind, die nicht NULL und nicht „nicht vorhanden“ sind, wird NULL zurückgegeben. Das gilt auch, wenn keine Dokumente berücksichtigt werden.

Wenn mehrere gleichwertige Mindestwerte vorhanden sind, kann einer dieser Werte zurückgegeben werden. Die Sortierung der Werttypen folgt der dokumentierten Sortierung.

Node.js
const result = await db.pipeline()
  .collection("books")
  .aggregate(field("price").minimum().as("minimumPrice"))
  .execute();

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()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .aggregate(minimum("price").as("minimumPrice"))
        .execute()
        .get();

MAXIMUM

Syntax :

maximum(expression: ANY) -> ANY

Beschreibung:

Gibt den Höchstwert von expression zurück, der nicht NULL und nicht „nicht vorhanden“ ist, wenn er für jedes Dokument ausgewertet wird.

Wenn keine Werte vorhanden sind, die nicht NULL und nicht „nicht vorhanden“ sind, wird NULL zurückgegeben. Das gilt auch, wenn keine Dokumente berücksichtigt werden.

Wenn mehrere gleichwertige Höchstwerte vorhanden sind, kann einer dieser Werte zurückgegeben werden. Die Sortierung der Werttypen folgt der dokumentierten Sortierung.

Node.js
const result = await db.pipeline()
  .collection("books")
  .aggregate(field("price").maximum().as("maximumPrice"))
  .execute();

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()
)
Java
Pipeline.Snapshot result =
    firestore
        .pipeline()
        .collection("books")
        .aggregate(maximum("price").as("maximumPrice"))
        .execute()
        .get();

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 letzte 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 nicht vorhandenen Wert aufgelöst wird, wird er in NULL konvertiert.

Die Reihenfolge der Elemente im Ausgabearray ist nicht stabil und sollte nicht verwendet 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 nicht vorhandenen Wert aufgelöst wird, wird er in NULL konvertiert.

Die Reihenfolge der Elemente im Ausgabearray ist nicht stabil und sollte nicht verwendet werden.