Ajouter des champs

Description

Ajoutez des champs aux documents produits à l'étape précédente.

Les documents générés contiendront tous les champs de l'étape précédente, ainsi que tous les champs nouvellement ajoutés, en écrasant tout champ portant le même nom que celui du document précédent. L'étape add_fields(...) permet de mettre à jour les champs imbriqués en spécifiant un nom de champ imbriqué comme alias.

Exemples

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();

Comportement

Champs qui se chevauchent

Si vous attribuez à une expression un alias qui figure déjà dans les documents de l'étape précédente, l'étape add_fields(...) écrasera le champ précédent. Cela peut être utilisé pour enchaîner plusieurs expressions sur le même nom de champ, comme suit :

Node.js

const results = await db.pipeline()
  .collection("/users")
  .addFields(field('age').abs().as('age'))
  .addFields(field('age').add(10).as('age'))
  .execute();

Champs imbriqués

Les champs imbriqués (par exemple, ceux avec la syntaxe .) peuvent être mis à jour au cours de cette étape. Cela permet de mettre à jour un champ "sur place", par exemple dans :

Node.js

const results = await db.pipeline()
  .collection("/users")
  .addFields(field('address.city').toLower().as('address.city'))
  .execute();

Si vous attribuez une expression à un champ imbriqué, tous les champs parents manquants seront également créés de manière implicite.