جایگزین کردن با

توضیحات

فیلدهای موجود در سند موجود را با فیلدهای موجود در یک عبارت مشخص جایگزین می‌کند.

این عبارت می‌تواند یک نگاشت تحت‌اللفظی یا عبارتی باشد که به یک نگاشت ارزیابی می‌شود. اگر یک عبارت داده شده به یک نگاشت ارزیابی نشود، این مرحله خطا را برمی‌گرداند.

3 حالت پشتیبانی شده وجود دارد:

  • full_replace : کل سند را با نتیجه عبارت داده شده جایگزین می‌کند و فیلدهایی را که در آن ظاهر نمی‌شوند، حذف می‌کند.
  • merge_overwrite_existing : عبارت را با سند موجود ادغام می‌کند و مقادیر فیلدهای موجود در سند را با مقادیر موجود در عبارت جایگزین می‌کند.
  • merge_keep_existing : عبارت را با سند موجود ادغام می‌کند و فقط زمانی مقادیر فیلد را اضافه می‌کند که فیلدی در سند وجود نداشته باشد.

مثال‌ها

یک مجموعه cities با اسناد زیر ایجاد کنید:

نود جی اس

await db.collection("cities").doc("SF").set({name: "San Francisco", population: 800000, location: {country: "USA", state: "California"}});
await db.collection("cities").doc("TO").set({name: "Toronto", population:  3000000, province: "ON", location: {country: "Canada", province: "Ontario"}});
await db.collection("cities").doc("NY").set({name: "New York", location: {country: "USA", state: "New York"}});
await db.collection("cities").cov("AT").set({name: "Atlantis", population: null});

استفاده از حالت full_replace برای دریافت یک نسخه جهش‌یافته از سند

فیلد location تو در تو را استخراج می‌کند و تمام داده‌های دیگر را حذف می‌کند:

نود جی اس
  const names = await db.pipeline()
    .collection("/cities")
    .replace_with(Field.of("location"), "full_replace")
    .execute();
    
جاوا
Pipeline.Snapshot names =
    firestore.pipeline().collection("cities").replaceWith(field("location")).execute().get();
برو
snapshot := client.Pipeline().
	Collection("cities").
	ReplaceWith(firestore.FieldOf("location")).
	Execute(ctx)

که اسناد زیر را تولید می‌کند:

{ country: "USA", state: "California" },
{ country: "Canada", province: "Ontario" },
{ country: "USA", state: "New York" },
{ }

استفاده از حالت merge_overwrite_existing برای تنظیم فیلدها

فیلد population تمام اسناد را روی ۰ تنظیم می‌کند و مقادیر موجود را بازنویسی می‌کند:

نود جی اس
  const censoredResults = await db.pipeline()
    .collection("/cities")
    .replace_with(map("population", 0), "merge_overwrite_existing")
    .execute();
    

که اسناد زیر را تولید می‌کند:

{name: "San Francisco", population: 0, location: {country: "USA", state: "California"}},
{name: "Toronto", population: 0, province: "ON", location: {country: "Canada", province: "Ontario"}},
{name: "New York", population: 0, location: {country: "USA", state: "New York"}},
{name: "Atlantis", population: 0}

استفاده از حالت merge_keep_existing برای اضافه کردن یک مقدار پیش‌فرض

تنظیم مقدار پیش‌فرض برای location ، زمانی که در سند نمایش داده نمی‌شود:

نود جی اس
  const defaultedResults = await db.pipeline()
    .collection("/cities")
    .replace_with(map("location", "unknown"), "merge_keep_existing")
    .execute();
    

که اسناد زیر را تولید می‌کند:

{ name: "San Francisco", population: 800000, location: { country: "USA", state: "California" } },
{ name: "Toronto", province: "ON", population: 3000000, location: { country: "Canada", province: "Ontario" } },
{ name: "New York", location: { country: "USA", state: "New York" } },
{ name: "Atlantis", population: null, location: "unknown" }