Tahap update(...) memperbarui dokumen yang ada.
Contoh
Misalnya, operasi berikut mengisi ulang perubahan model data ke semua dokumen dalam grup koleksi. Pipeline menambahkan kolom preferences.color ke semua dokumen dalam grup koleksi users yang tidak memiliki kolom tersebut.
Node.js
const snapshot = await db.pipeline() .collectionGroup("users") .where(not(exists(field("preferences.color")))) .addFields(constant(null).as("preferences.color")) .removeFields("color") .update() .execute();
Python
from google.cloud.firestore_v1.pipeline_expressions import Constant, Field, Not snapshot = ( client.pipeline() .collection_group("users") .where(Not(Field.of("preferences.color").exists())) .add_fields(Constant.of(None).as_("preferences.color")) .remove_fields("color") .update() .execute() )
Java
Pipeline.Snapshot snapshot = firestore.pipeline() .collectionGroup("users") .where(not(exists(field("preferences.color")))) .addFields(constant((String) null).as("preferences.color")) .removeFields("color") .update() .execute().get();
Go
snapshot := client.Pipeline(). CollectionGroup("users"). Where(firestore.Not(firestore.FieldExists(firestore.FieldOf("preferences.color")))). AddFields(firestore.Selectables( firestore.ConstantOfNull().As("preferences.color"), )). RemoveFields(firestore.Fields("color")). Update(). Execute(ctx)
Perilaku
Semua tahap bahasa manipulasi data (DML) harus berada di akhir pipeline.
Dokumen yang masuk ke tahap ini harus menyertakan kolom __name__ untuk mengidentifikasi dokumen mana yang akan diperbarui. Operasi akan gagal jika salah satu dokumen tidak ada.
Sebagian besar tahap Input (seperti collection(...),
collection_group(...),
database(...), dan
documents(...)) menyertakan kolom __name__ secara
default.
Anda dapat secara opsional memberikan transformations untuk diterapkan tepat sebelum menulis dokumen. Tindakan ini sama dengan menambahkan
add_fields(...) tepat sebelum tahap output akhir dan
ekspresi berjalan dalam konteks dokumen sebelumnya.
Respons mencakup ringkasan jumlah dokumen yang diubah. Misalnya, respons berikut mengonfirmasi bahwa pipeline mengubah tiga dokumen:
{documents_modified: 3L}
Batasan
Tahap DML tidak mendukung Cloud Firestore Security Rules. Upaya operasi DML melalui Cloud Firestore Security Rules akan ditolak.
Selama Pratinjau untuk fitur ini, Anda tidak dapat menjalankan tahap DML dalam transaksi. Untuk mengetahui informasi selengkapnya tentang perilaku konsistensi, lihat Konsistensi.
Jika tahap sebelum tahap DML menghasilkan beberapa dokumen dengan
__name__yang sama, setiap instance akan diproses. Untukupdate(...), hal ini berarti dokumen target yang sama mungkin diubah beberapa kali. Untukdelete(...), upaya berikutnya setelah yang pertama tidak akan dioperasikan.