Update

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. Untuk update(...), hal ini berarti dokumen target yang sama mungkin diubah beberapa kali. Untuk delete(...), upaya berikutnya setelah yang pertama tidak akan dioperasikan.