L'étape update(...) met à jour les documents existants.
Exemples
Par exemple, l'opération suivante remplit une modification du modèle de données dans tous les documents d'un groupe de collections. Le pipeline ajoute un champ preferences.color à tous les documents du groupe de collections users qui ne comportent pas ce champ.
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)
Comportement
Toutes les étapes du langage de manipulation de données (LMD) doivent se trouver à la fin du pipeline.
Les documents qui arrivent à cette étape doivent inclure le champ __name__ pour identifier les documents à mettre à jour. L'opération échoue si l'un des documents n'existe pas.
La plupart des étapes d'entrée (telles que collection(...),
collection_group(...),
database(...) et
documents(...)) incluent le champ __name__ par
défaut.
Vous pouvez éventuellement fournir des transformations à appliquer juste avant d'écrire les documents. Elles agissent de la même manière que l'ajout d'un
add_fields(...) juste avant l'étape de sortie finale, et les
expressions s'exécutent dans le contexte des documents précédents.
La réponse inclut un résumé du nombre de documents modifiés. Par exemple, la réponse suivante confirme que le pipeline a modifié trois documents :
{documents_modified: 3L}
Limites
Les étapes LMD ne sont pas compatibles avec Cloud Firestore Security Rules. Les tentatives d'opération LMD via Cloud Firestore Security Rules sont refusées.
Pendant l'aperçu de cette fonctionnalité, vous ne pouvez pas exécuter d'étapes LMD dans une transaction. Pour en savoir plus sur le comportement de cohérence, consultez la section Cohérence.
Si l'étape précédant l'étape LMD produit plusieurs documents portant le même
__name__, chaque instance est traitée. Pourupdate(...), cela signifie que le même document cible peut être modifié plusieurs fois. Pourdelete(...), les tentatives suivantes après la première seront des no-ops.