Güncelle

update(...) aşaması, mevcut dokümanları günceller.

Örnekler

Örneğin, aşağıdaki işlem bir koleksiyon grubundaki tüm belgelere veri modeli değişikliğiyle ilgili verileri doldurur. Ardışık düzen, preferences.color alanını users koleksiyon grubundaki bu alanın eksik olduğu tüm belgelere ekler.

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)

Davranış

Tüm veri manipülasyon dili (DML) aşamaları, işlem hattının sonunda yer almalıdır.

Bu aşamaya gelen dokümanlar, hangi dokümanların güncelleneceğini belirlemek için __name__ alanını içermelidir. Belgelerden herhangi biri yoksa işlem başarısız olur. Çoğu giriş aşaması (ör. collection(...), collection_group(...), database(...) ve documents(...)) varsayılan olarak __name__ alanını içerir.

İsteğe bağlı olarak, belgeleri yazmadan hemen önce uygulamak için transformations sağlayabilirsiniz. Bu işlem, son çıkış aşamasından hemen önce bir add_fields(...) eklemeyle aynı şekilde çalışır ve ifadeler önceki dokümanlar bağlamında çalıştırılır.

Yanıt, değiştirilen doküman sayısının özetini içerir. Örneğin, aşağıdaki yanıt, ardışık düzenin üç belgeyi değiştirdiğini onaylar:

{documents_modified: 3L}

Sınırlamalar

  • DML aşamaları Cloud Firestore Security Rules özelliğini desteklemez. Cloud Firestore Security Rules üzerinden DML işlemi denemeleri reddedilir.

  • Bu özelliğin önizleme sürümü sırasında, bir işlemde DML aşamalarını çalıştıramazsınız. Tutarlılık davranışı hakkında daha fazla bilgi için Tutarlılık başlıklı makaleyi inceleyin.

  • DML aşamasından önceki aşamada aynı __name__ ile birden fazla doküman oluşturulursa her örnek işlenir. update(...) için bu, aynı hedef dokümanın birden çok kez değiştirilebileceği anlamına gelir. delete(...) için ilk denemeden sonraki denemeler işlem yapmaz.