Adicionar campos

Descrição

Adicione novos campos aos documentos produzidos na etapa anterior.

Os documentos gerados vão conter todos os campos da etapa anterior, além de todos os campos recém-adicionados, substituindo qualquer campo que compartilhe o mesmo nome do documento anterior.

Sintaxe

Node.js

const results = await db.pipeline()
  .collection("/users")
  .addFields(field('first_name').concat(' ', field('last_name')).as('full_name'))
  .execute();

Exemplos de clientes

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

Comportamento

Campos sobrepostos

Atribuir a uma expressão um alias que já está nos documentos da etapa anterior faz com que a etapa add_fields(...) substitua o campo anterior.

Isso pode ser usado para encadear várias expressões no mesmo nome de campo, como:

Node.js

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

Campos de aninhamento

Embora o alias atribuído aos campos recém-adicionados possa conter caracteres especiais, como ., eles são tratados como campos de nível superior. Exemplo:

Node.js

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

adiciona um novo campo de nível superior address.city em vez de mesclar o resultado da expressão de volta ao mapa aninhado em address.