Substituir por (etapa de transformação)

Descrição

Substitui os campos no documento atual pelos campos em uma determinada expressão.

A expressão pode ser um mapa literal ou uma expressão que avalia um mapa. Se uma determinada expressão não for avaliada como um mapa, essa etapa vai retornar um erro.

Há três modos disponíveis:

  • full_replace: substitui todo o documento pelo resultado da expressão especificada, omitindo campos que não aparecem nela.
  • merge_overwrite_existing: mescla a expressão com o documento atual, substituindo os valores de campo no documento com os valores na expressão.
  • merge_keep_existing: mescla a expressão com o documento atual, adicionando valores de campo apenas quando eles não existem no documento.

Exemplos

Crie uma coleção cities com os seguintes documentos:

Node.js

await db.collection("cities").doc("SF").set({name: "San Francisco", population: 800000, location: {country: "USA", state: "California"}});
await db.collection("cities").doc("TO").set({name: "Toronto", population:  3000000, province: "ON", location: {country: "Canada", province: "Ontario"}});
await db.collection("cities").doc("NY").set({name: "New York", location: {country: "USA", state: "New York"}});
await db.collection("cities").cov("AT").set({name: "Atlantis", population: null});

Usar o modo "full_replace" para receber uma versão mutante do documento

Extraia o campo aninhado location, descartando todos os outros dados:

Node.js
  const names = await db.pipeline()
    .collection("/cities")
    .replace_with(Field.of("location"), "full_replace")
    .execute();
    
Java
Pipeline.Snapshot names =
    firestore.pipeline().collection("cities").replaceWith(field("location")).execute().get();

O que produz os seguintes documentos:

{ country: "USA", state: "California" },
{ country: "Canada", province: "Ontario" },
{ country: "USA", state: "New York" },
{ }

Usar o modo "merge_overwrite_existing" para definir campos

Defina o campo population de todos os documentos como 0, substituindo os valores atuais:

Node.js
  const censoredResults = await db.pipeline()
    .collection("/cities")
    .replace_with(map("population", 0), "merge_overwrite_existing")
    .execute();
    

O que produz os seguintes documentos:

{name: "San Francisco", population: 0, location: {country: "USA", state: "California"}},
{name: "Toronto", population: 0, province: "ON", location: {country: "Canada", province: "Ontario"}},
{name: "New York", population: 0, location: {country: "USA", state: "New York"}},
{name: "Atlantis", population: 0}

Usar o modo "merge_keep_existing" para adicionar um valor padrão

Definir um valor padrão para location quando ele não aparece em um documento:

Node.js
  const defaultedResults = await db.pipeline()
    .collection("/cities")
    .replace_with(map("location", "unknown"), "merge_keep_existing")
    .execute();
    

O que produz os seguintes documentos:

{ name: "San Francisco", population: 800000, location: { country: "USA", state: "California" } },
{ name: "Toronto", province: "ON", population: 3000000, location: { country: "Canada", province: "Ontario" } },
{ name: "New York", location: { country: "USA", state: "New York" } },
{ name: "Atlantis", population: null, location: "unknown" }