Atualizar

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. Para update(...), isso significa que o mesmo documento de destino pode ser modificado várias vezes. Para delete(...), as tentativas subsequentes após a primeira serão no-ops.