توضیحات
فیلدهای جدید را به اسناد تولید شده در مرحله قبل اضافه کنید.
اسناد تولید شده شامل تمام فیلدهای مرحله قبل به همراه تمام فیلدهای جدید اضافه شده خواهد بود و هر فیلدی که نام مشابهی از سند قبلی دارد را بازنویسی میکند. مرحله add_fields(...) امکان بهروزرسانی فیلدهای تو در تو را با مشخص کردن نام یک فیلد تو در تو به عنوان نام مستعار فراهم میکند.
مثالها
Web
const result = await execute(db.pipeline() .collection("books") .select(field("soldBooks").add(field("unsoldBooks")).as("totalBooks")) );
سویفت
let result = try await db.pipeline() .collection("books") .select([Field("soldBooks").add(Field("unsoldBooks")).as("totalBooks")]) .execute()
Kotlin
val result = db.pipeline() .collection("books") .select(Expression.add(field("soldBooks"), field("unsoldBooks")).alias("totalBooks")) .execute()
Java
Task<Pipeline.Snapshot> result = db.pipeline() .collection("books") .select(Expression.add(field("soldBooks"), field("unsoldBooks")).alias("totalBooks")) .execute();
پایتون
from google.cloud.firestore_v1.pipeline_expressions import Field result = ( client.pipeline() .collection("books") .select(Field.of("soldBooks").add(Field.of("unsoldBooks")).as_("totalBooks")) .execute() )
جاوا
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(add(field("soldBooks"), field("unsoldBooks")).as("totalBooks")) .execute() .get();
رفتار
فیلدهای همپوشانی
اختصاص دادن یک نام مستعار به یک عبارت که از قبل در اسناد مرحله قبل وجود دارد، باعث میشود مرحله add_fields(...) فیلد قبلی را بازنویسی کند. این میتواند برای زنجیرهای کردن چندین عبارت روی یک نام فیلد مشابه استفاده شود، مانند:
نود جی اس
const results = await db.pipeline()
.collection("/users")
.addFields(field('age').abs().as('age'))
.addFields(field('age').add(10).as('age'))
.execute();
فیلدهای تو در تو
فیلدهای تو در تو (مثلاً آنهایی که سینتکس . دارند) میتوانند به عنوان بخشی از این مرحله بهروزرسانی شوند. این امر بهروزرسانی یک فیلد را به صورت «درجا» امکانپذیر میکند، مانند:
نود جی اس
const results = await db.pipeline()
.collection("/users")
.addFields(field('address.city').toLower().as('address.city'))
.execute();
اختصاص دادن یک عبارت به یک فیلد تو در تو، به طور ضمنی فیلدهای والد از دست رفته را نیز ایجاد میکند.