Agregación
Todas las funciones de agregación se pueden usar como expresiones de nivel superior en la etapa aggregate(...).
| Nombre | Descripción |
COUNT
|
Devuelve la cantidad de documentos. |
COUNT_IF
|
Devuelve el recuento de documentos en los que una expresión se evalúa como TRUE.
|
COUNT_DISTINCT
|
Devuelve el recuento de valores únicos que no son NULL.
|
SUM
|
Devuelve la suma de todos los valores NUMERIC.
|
AVERAGE
|
Devuelve el promedio de todos los valores NUMERIC.
|
MINIMUM
|
Devuelve el valor mínimo que no es NULL.
|
MAXIMUM
|
Devuelve el valor máximo que no es NULL.
|
FIRST
|
Devuelve el valor de expression para el primer documento.
|
LAST
|
Devuelve el valor de expression para el último documento.
|
ARRAY_AGG
|
Devuelve un array de todos los valores de entrada. |
ARRAY_AGG_DISTINCT
|
Devuelve un array de todos los valores de entrada distintos. |
COUNT
Sintaxis:
count() -> INT64
count(expression: ANY) -> INT64
Descripción:
Devuelve el recuento de documentos de la etapa anterior en la que expression se evalúa como cualquier valor que no sea NULL. Si no se proporciona ninguna expression, se devuelve el recuento total de documentos de la etapa anterior.
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
Sintaxis:
count_if(expression: BOOLEAN) -> INT64
Descripción:
Devuelve la cantidad de documentos de la etapa anterior en la que expression se evalúa como 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
Sintaxis:
count_distinct(expression: ANY) -> INT64
Descripción:
Devuelve la cantidad de valores únicos que no son NULL ni 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
Sintaxis:
sum(expression: ANY) -> NUMBER
Descripción:
Devuelve la suma de todos los valores numéricos, sin tener en cuenta los valores no numéricos. Devuelve NaN si algún valor es NaN.
El resultado tendrá el mismo tipo que el tipo de entrada, excepto en los siguientes casos:
- Un
INTEGERse convertirá en unDOUBLEsi no se puede representar como unINTEGER.
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
Sintaxis:
average(expression: ANY) -> FLOAT64
Descripción:
Devuelve el promedio de todos los valores numéricos, sin tener en cuenta los valores no numéricos.
Se evalúa como NaN si algún valor es NaN, o como NULL si no se agregan valores numéricos.
El resultado tendrá el mismo tipo que el tipo de entrada, excepto en los siguientes casos:
- Un
INTEGERse convertirá en unDOUBLEsi no se puede representar como unINTEGER.
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
Sintaxis:
minimum(expression: ANY) -> ANY
Descripción:
Devuelve el valor mínimo que no es NULL ni está ausente de expression cuando se evalúa en cada documento.
Si no hay valores que no sean NULL ni ausentes, se devuelve NULL. Esto incluye los casos en los que no se consideran documentos.
Si hay varios valores equivalentes mínimos, se puede devolver cualquiera de ellos. El orden de los tipos de valor sigue el orden documentado.
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
Sintaxis:
maximum(expression: ANY) -> ANY
Descripción:
Devuelve el valor máximo que no es NULL ni está ausente de expression cuando se evalúa en cada documento.
Si no hay valores que no sean NULL ni ausentes, se devuelve NULL. Esto incluye los casos en los que no se consideran documentos.
Si hay varios valores equivalentes máximos, se puede devolver cualquiera de ellos. El orden de los tipos de valor sigue el orden documentado.
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
Sintaxis:
first(expression: ANY) -> ANY
Descripción:
Devuelve el valor de expression para el primer documento devuelto.
LAST
Sintaxis:
last(expression: ANY) -> ANY
Descripción:
Devuelve el valor de expression para el último documento devuelto.
ARRAY_AGG
Sintaxis:
array_agg(expression: ANY) -> ARRAY<ANY>
Descripción:
Devuelve un array que contiene todos los valores de expression cuando se evalúa en cada documento.
Si la expresión se resuelve en un valor ausente, se convierte en NULL.
El orden de los elementos en el array de salida no es estable y no se debe confiar en él.
ARRAY_AGG_DISTINCT
Sintaxis:
array_agg_distinct(expression: ANY) -> ARRAY<ANY>
Descripción:
Devuelve un array que contiene todos los valores distintos de expression cuando se evalúa en cada documento.
Si la expresión se resuelve en un valor ausente, se convierte en NULL.
El orden de los elementos en el array de salida no es estable y no se debe confiar en él.