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.