به روز رسانی

مرحله update(...) اسناد موجود را به‌روزرسانی می‌کند.

مثال‌ها

برای مثال، عملیات زیر یک تغییر مدل داده را برای تمام اسناد موجود در یک گروه مجموعه، دوباره پر می‌کند. این خط لوله، فیلد preferences.color را به تمام اسناد موجود در گروه مجموعه users که آن فیلد را ندارند، اضافه می‌کند.

نود جی اس
const snapshot = await db.pipeline()
   .collectionGroup("users")
   .where(not(exists(field("preferences.color"))))
   .addFields(constant(null).as("preferences.color"))
   .removeFields("color")
   .update()
   .execute();
پایتون
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()
)
جاوا
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();
برو
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)

رفتار

تمام مراحل زبان دستکاری داده‌ها (DML) باید در انتهای خط لوله قرار گیرند.

اسنادی که وارد این مرحله می‌شوند باید شامل فیلد __name__ باشند تا مشخص شود کدام اسناد باید به‌روزرسانی شوند. اگر هر یک از اسناد وجود نداشته باشند، عملیات با شکست مواجه می‌شود. اکثر مراحل ورودی (مانند collection(...) ، collection_group(...) ، database(...) و documents(...) ) به طور پیش‌فرض شامل فیلد __name__ هستند.

شما می‌توانید به صورت اختیاری transformations برای اعمال درست قبل از نوشتن اسناد ارائه دهید. این تبدیل‌ها دقیقاً مانند اضافه کردن add_fields(...) درست قبل از مرحله خروجی نهایی عمل می‌کنند و عبارات در متن اسناد قبلی اجرا می‌شوند.

پاسخ شامل خلاصه‌ای از تعداد اسناد اصلاح‌شده است. برای مثال، پاسخ زیر تأیید می‌کند که خط لوله سه سند را اصلاح کرده است:

{documents_modified: 3L}

محدودیت‌ها

  • مراحل DML Cloud Firestore Security Rules پشتیبانی نمی‌کنند. تلاش‌های عملیات DML از طریق Cloud Firestore Security Rules رد می‌شوند.

  • در طول پیش‌نمایش این ویژگی، نمی‌توانید مراحل DML را در یک تراکنش اجرا کنید. برای اطلاعات بیشتر در مورد رفتار سازگاری، به Consistency مراجعه کنید.

  • اگر مرحله قبل از مرحله DML، چندین سند با __name__ یکسان تولید کند، هر نمونه پردازش می‌شود. برای update(...) ، این بدان معناست که یک سند هدف ممکن است چندین بار تغییر کند. برای delete(...) ، تلاش‌های بعدی پس از اولین تلاش، بدون عملیات خواهند بود.