Descripción
Agrega campos nuevos a los documentos que produjo la etapa anterior.
Los documentos generados contendrán todos los campos de la etapa anterior, junto con todos los campos agregados recientemente, y se sobrescribirá cualquier campo que comparta el mismo nombre del documento anterior.
Sintaxis
Node.js
const results = await db.pipeline()
.collection("/users")
.addFields(field('first_name').concat(' ', field('last_name')).as('full_name'))
.execute();
Ejemplos de clientes
Web
const result = await execute(db.pipeline() .collection("books") .select(field("soldBooks").add(field("unsoldBooks")).as("totalBooks")) );
Swift
let result = try await db.pipeline() .collection("books") .select([Field("soldBooks").add(Field("unsoldBooks")).as("totalBooks")]) .execute()
Kotlin
val result = db.pipeline() .collection("books") .select(Expression.add(field("soldBooks"), field("unsoldBooks")).alias("totalBooks")) .execute()
Java
Task<Pipeline.Snapshot> result = db.pipeline() .collection("books") .select(Expression.add(field("soldBooks"), field("unsoldBooks")).alias("totalBooks")) .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .select(Field.of("soldBooks").add(Field.of("unsoldBooks")).as_("totalBooks")) .execute() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(add(field("soldBooks"), field("unsoldBooks")).as("totalBooks")) .execute() .get();
Comportamiento
Campos superpuestos
Si se asigna a una expresión un alias que ya se encuentra en los documentos de la etapa anterior, la etapa add_fields(...) sobrescribirá el campo anterior.
Esto se puede usar para encadenar varias expresiones sobre el mismo nombre de campo, como en el siguiente ejemplo:
Node.js
const results = await db.pipeline()
.collection("/users")
.addFields(field('age').abs().as('age'))
.addFields(field('age').add(10).as('age'))
.execute();
Campos de anidación
Si bien el alias asignado a los campos recién agregados puede contener caracteres especiales, como ., estos se tratan como campos de nivel superior. Por ejemplo:
Node.js
const results = await db.pipeline()
.collection("/users")
.addFields(field('address.city').toLower().as('address.city'))
.execute();
agrega un nuevo campo de nivel superior address.city en lugar de combinar el resultado de la expresión en el mapa anidado en address.