Tambahkan Kolom (Tahap Transformasi)

Deskripsi

Menambahkan kolom baru ke dokumen yang dihasilkan oleh tahap sebelumnya.

Dokumen yang dibuat akan berisi semua kolom dari tahap sebelumnya beserta semua kolom yang baru ditambahkan, dengan mengganti kolom yang memiliki nama yang sama dari dokumen sebelumnya. Tahap add_fields(...) memungkinkan pembaruan kolom bertingkat dengan menentukan nama kolom bertingkat sebagai alias.

Contoh

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
Android
val result = db.pipeline()
    .collection("books")
    .select(Expression.add(field("soldBooks"), field("unsoldBooks")).alias("totalBooks"))
    .execute()
Java
Android
      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();
Go
snapshot := client.Pipeline().
	Collection("books").
	Select(firestore.Fields(
		firestore.Add(firestore.FieldOf("soldBooks"), firestore.FieldOf("unsoldBooks")).As("totalBooks"),
	)).
	Execute(ctx)

Perilaku

Kolom yang Tumpang Tindih

Jika Anda memberi alias pada ekspresi yang sudah ada dalam dokumen dari tahap sebelumnya, tahap add_fields(...) akan menimpa kolom sebelumnya. Hal ini dapat digunakan untuk menggabungkan beberapa ekspresi pada nama kolom yang sama, seperti:

Node.js

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

Kolom Bertingkat

Kolom bertingkat (misalnya, yang memiliki sintaksis .) dapat diperbarui sebagai bagian dari tahap ini. Hal ini memungkinkan untuk memperbarui kolom "di tempat" seperti dalam:

Node.js

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

Menetapkan ekspresi ke kolom bertingkat juga akan membuat kolom induk yang belum ada secara implisit.