Funzioni di aggregazione

Aggregate

Tutte le funzioni di aggregazione possono essere utilizzate come espressioni di primo livello nella fase aggregate(...).

Nome Descrizione
COUNT Restituisce il numero di documenti.
COUNT_IF Restituisce il conteggio dei documenti in cui un'espressione restituisce TRUE
COUNT_DISTINCT Restituisce il conteggio dei valori univoci e non NULL
SUM Restituisce la somma di tutti i valori di NUMERIC
AVERAGE Restituisce la media di tutti i valori di NUMERIC
MINIMUM Restituisce il valore minimo diverso da NULL
MAXIMUM Restituisce il valore massimo non NULL
FIRST Restituisce il valore expression per il primo documento.
LAST Restituisce il valore expression per l'ultimo documento.
ARRAY_AGG Restituisce un array di tutti i valori di input.
ARRAY_AGG_DISTINCT Restituisce un array di tutti i valori di input distinti.

COUNT

Sintassi:

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

Descrizione:

Restituisce il conteggio dei documenti della fase precedente in cui expression restituisce un valore diverso da NULL. Se non viene fornito alcun expression, restituisce il conteggio totale dei documenti della fase precedente.

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

Sintassi:

count_if(expression: BOOLEAN) -> INT64

Descrizione:

Restituisce il numero di documenti della fase precedente in cui expression restituisce TRUE.

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

Sintassi:

count_distinct(expression: ANY) -> INT64

Descrizione:

Restituisce il numero di valori univoci non NULL e non ABSENT di expression.

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

Sintassi:

sum(expression: ANY) -> NUMBER

Descrizione:

Restituisce la somma di tutti i valori numerici, ignorando i valori non numerici. Restituisce NaN se uno dei valori è NaN.

L'output avrà lo stesso tipo dell'input più ampio, tranne nei seguenti casi:

  • Un INTEGER verrà convertito in un DOUBLE se non può essere rappresentato come INTEGER.

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

Medio

Sintassi:

average(expression: ANY) -> FLOAT64

Descrizione:

Restituisce la media di tutti i valori numerici, ignorando i valori non numerici. Restituisce NaN se uno dei valori è NaN o NULL se non vengono aggregati valori numerici.

L'output avrà lo stesso tipo dell'input, tranne nei seguenti casi:

  • Un INTEGER verrà convertito in un DOUBLE se non può essere rappresentato come INTEGER.

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

Sintassi:

minimum(expression: ANY) -> ANY

Descrizione:

Restituisce il valore minimo non NULL e non assente di expression quando viene valutato su ogni documento.

Se non sono presenti valori non NULL e non assenti, viene restituito NULL. Ciò include i casi in cui non vengono presi in considerazione documenti.

Se sono presenti più valori minimi equivalenti, può essere restituito uno qualsiasi di questi valori. L'ordinamento dei tipi di valore segue l'ordinamento documentato.

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

MASSIMO

Sintassi:

maximum(expression: ANY) -> ANY

Descrizione:

Restituisce il valore massimo non NULL e non assente di expression quando viene valutato su ogni documento.

Se non sono presenti valori non NULL e non assenti, viene restituito NULL. Ciò include i casi in cui non vengono presi in considerazione documenti.

Se esistono più valori equivalenti massimi, può essere restituito uno qualsiasi di questi valori. L'ordinamento dei tipi di valore segue l'ordinamento documentato.

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

Sintassi:

first(expression: ANY) -> ANY

Descrizione:

Restituisce il valore di expression per il primo documento restituito.

ULTIMO

Sintassi:

last(expression: ANY) -> ANY

Descrizione:

Restituisce il valore di expression per l'ultimo documento restituito.

ARRAY_AGG

Sintassi:

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

Descrizione:

Restituisce un array contenente tutti i valori di expression quando viene valutato su ogni documento.

Se l'espressione viene risolta in un valore assente, viene convertita in NULL.

L'ordine degli elementi nell'array di output non è stabile e non deve essere considerato affidabile.

ARRAY_AGG_DISTINCT

Sintassi:

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

Descrizione:

Restituisce un array contenente tutti i valori distinti di expression quando viene valutato su ogni documento.

Se l'espressione viene risolta in un valore assente, viene convertita in NULL.

L'ordine degli elementi nell'array di output non è stabile e non deve essere considerato affidabile.