La etapa update(...) actualiza los documentos existentes.
Ejemplos
Por ejemplo, la siguiente operación propaga un cambio en el modelo de datos a todos los documentos de un grupo de colección. La canalización agrega un campo preferences.color a todos los documentos del grupo de colección users que no tienen ese campo.
Node.js
const snapshot = await db.pipeline() .collectionGroup("users") .where(not(exists(field("preferences.color")))) .addFields(constant(null).as("preferences.color")) .removeFields("color") .update() .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Constant, Field, Not snapshot = ( client.pipeline() .collection_group("users") .where(Not(Field.of("preferences.color").exists())) .add_fields(Constant.of(None).as_("preferences.color")) .remove_fields("color") .update() .execute() )
Java
Pipeline.Snapshot snapshot = firestore.pipeline() .collectionGroup("users") .where(not(exists(field("preferences.color")))) .addFields(constant((String) null).as("preferences.color")) .removeFields("color") .update() .execute().get();
Go
snapshot := client.Pipeline(). CollectionGroup("users"). Where(firestore.Not(firestore.FieldExists(firestore.FieldOf("preferences.color")))). AddFields(firestore.Selectables( firestore.ConstantOfNull().As("preferences.color"), )). RemoveFields(firestore.Fields("color")). Update(). Execute(ctx)
Comportamiento
Todas las etapas del lenguaje de manipulación de datos (DML) deben estar al final de la canalización.
Los documentos que ingresan a esta etapa deben incluir el campo __name__ para identificar qué documentos actualizar. La operación falla si no existe alguno de los documentos.
La mayoría de las etapas de entrada (como collection(...),
collection_group(...),
database(...) y
documents(...)) incluyen el campo __name__ de forma
predeterminada.
De manera opcional, puedes proporcionar transformations para aplicar justo antes de escribir los documentos. Estos actúan de forma idéntica a agregar un
add_fields(...) justo antes de la etapa de salida final, y las
expresiones se ejecutan en el contexto de los documentos anteriores.
La respuesta incluye un resumen de la cantidad de documentos modificados. Por ejemplo, la siguiente respuesta confirma que la canalización modificó tres documentos:
{documents_modified: 3L}
Limitaciones
Las etapas de DML no admiten Cloud Firestore Security Rules. Se rechazan los intentos de operación DML a través de Cloud Firestore Security Rules.
Durante la versión preliminar de esta función, no puedes ejecutar etapas de DML en una transacción. Para obtener más información sobre el comportamiento de coherencia, consulta Coherencia.
Si la etapa anterior a la etapa de DML produce varios documentos con el mismo
__name__, se procesa cada instancia. Paraupdate(...), esto significa que el mismo documento de destino se puede modificar varias veces. Paradelete(...), los intentos posteriores después del primero serán no-ops.