Fonctions d'agrégation

Aggregate

Toutes les fonctions d'agrégation peuvent être utilisées comme expressions de premier niveau dans l'étape aggregate(...).

Nom Description
COUNT Renvoie le nombre de documents.
COUNT_IF Renvoie le nombre de documents pour lesquels une expression est évaluée à TRUE.
COUNT_DISTINCT Renvoie le nombre de valeurs uniques et non NULL.
SUM Renvoie la somme de toutes les valeurs NUMERIC.
AVERAGE Renvoie la moyenne de toutes les valeurs NUMERIC.
MINIMUM Renvoie la valeur minimale non NULL.
MAXIMUM Renvoie la valeur maximale non NULL
FIRST Renvoie la valeur expression pour le premier document.
LAST Renvoie la valeur expression pour le dernier document.
ARRAY_AGG Renvoie un tableau de toutes les valeurs d'entrée.
ARRAY_AGG_DISTINCT Renvoie un tableau de toutes les valeurs d'entrée distinctes.

COUNT

Syntaxe :

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

Description :

Renvoie le nombre de documents de l'étape précédente où expression est évalué avec une valeur non NULL. Si aucun expression n'est fourni, renvoie le nombre total de documents de l'étape précédente.

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

Syntaxe :

count_if(expression: BOOLEAN) -> INT64

Description :

Renvoie le nombre de documents de l'étape précédente où expression est évalué à 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

Syntaxe :

count_distinct(expression: ANY) -> INT64

Description :

Renvoie le nombre de valeurs uniques non-NULL et non-ABSENT de 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

Syntaxe :

sum(expression: ANY) -> NUMBER

Description :

Renvoie la somme de toutes les valeurs numériques, en ignorant les valeurs non numériques. Renvoie NaN si l'une des valeurs est NaN.

Le résultat aura le même type que le type d'entrée le plus large, sauf dans les cas suivants :

  • Un INTEGER sera converti en DOUBLE s'il ne peut pas être représenté en tant que 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()
)

MOYENNE

Syntaxe :

average(expression: ANY) -> FLOAT64

Description :

Renvoie la moyenne de toutes les valeurs numériques, en ignorant les valeurs non numériques. Renvoie NaN si l'une des valeurs est NaN, ou NULL si aucune valeur numérique n'est agrégée.

Le résultat aura le même type que le type d'entrée, sauf dans les cas suivants :

  • Un INTEGER sera converti en DOUBLE s'il ne peut pas être représenté en tant que 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

Syntaxe :

minimum(expression: ANY) -> ANY

Description :

Renvoie la valeur minimale non-NULL et non absente de expression lorsqu'elle est évaluée sur chaque document.

S'il n'y a pas de valeurs non NULL et non absentes, NULL est renvoyé. Cela inclut le cas où aucun document n'est pris en compte.

S'il existe plusieurs valeurs équivalentes minimales, l'une d'entre elles peut être renvoyée. L'ordre des types de valeurs suit l'ordre documenté.

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

Syntaxe :

maximum(expression: ANY) -> ANY

Description :

Renvoie la valeur maximale non-NULL et non absente de expression lorsqu'elle est évaluée sur chaque document.

S'il n'y a pas de valeurs non NULL et non absentes, NULL est renvoyé. Cela inclut le cas où aucun document n'est pris en compte.

S'il existe plusieurs valeurs équivalentes maximales, l'une d'entre elles peut être renvoyée. L'ordre des types de valeurs suit l'ordre documenté.

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

Syntaxe :

first(expression: ANY) -> ANY

Description :

Renvoie la valeur de expression pour le premier document renvoyé.

DERNIER

Syntaxe :

last(expression: ANY) -> ANY

Description :

Renvoie la valeur de expression pour le dernier document renvoyé.

ARRAY_AGG

Syntaxe :

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

Description :

Renvoie un tableau contenant toutes les valeurs de expression lorsqu'il est évalué sur chaque document.

Si l'expression renvoie une valeur absente, elle est convertie en NULL.

L'ordre des éléments dans le tableau de sortie n'est pas stable et ne doit pas être utilisé.

ARRAY_AGG_DISTINCT

Syntaxe :

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

Description :

Renvoie un tableau contenant toutes les valeurs distinctes de expression lorsqu'elles sont évaluées sur chaque document.

Si l'expression renvoie une valeur absente, elle est convertie en NULL.

L'ordre des éléments dans le tableau de sortie n'est pas stable et ne doit pas être utilisé.