A etapa update(...) atualiza os documentos atuais.
Exemplos
Por exemplo, a operação a seguir preenche uma mudança de modelo de dados em todos os documentos de um grupo de coleções. O pipeline adiciona um campo preferences.color a todos os documentos do grupo de coleções users que não têm esse 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)
Comportamento
Todas as etapas da linguagem de manipulação de dados (DML) precisam estar no final do pipeline.
Os documentos que chegam a essa etapa precisam incluir o campo __name__ para identificar quais documentos atualizar. A operação falha se algum dos documentos não existir.
A maioria das etapas de entrada (como collection(...),
collection_group(...),
database(...) e
documents(...)) inclui o campo __name__ por
padrão.
Opcionalmente, você pode fornecer transformations para aplicar logo antes de gravar os documentos. Eles agem de maneira idêntica à adição de um
add_fields(...) logo antes da etapa de saída final, e as
expressões são executadas no contexto dos documentos anteriores.
A resposta inclui um resumo do número de documentos modificados. Por exemplo, a resposta a seguir confirma que o pipeline modificou três documentos:
{documents_modified: 3L}
Limitações
As etapas de DML não oferecem suporte a Cloud Firestore Security Rules. As tentativas de operação de DML por meio de Cloud Firestore Security Rules são negadas.
Durante a visualização desse recurso, não é possível executar etapas de DML em uma transação. Para mais informações sobre o comportamento de consistência, consulte Consistência.
Se a etapa anterior à etapa de DML produzir vários documentos com o mesmo
__name__, cada instância será processada. Paraupdate(...), isso significa que o mesmo documento de destino pode ser modificado várias vezes. Paradelete(...), as tentativas subsequentes após a primeira serão no-ops.