תיאור
מוסיפים שדות חדשים למסמכים שנוצרו בשלב הקודם.
המסמכים שייווצרו יכללו את כל השדות מהשלב הקודם, יחד עם כל השדות החדשים שנוספו. אם יש שדות עם אותו שם כמו במסמך הקודם, הם יוחלפו. השלב add_fields(...) מאפשר לעדכן שדות מקוננים על ידי ציון שם של שדה מקונן ככינוי.
דוגמאות
Web
const result = await execute(db.pipeline() .collection("books") .select(field("soldBooks").add(field("unsoldBooks")).as("totalBooks")) );
Swift
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();
Python
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() )
Java
Pipeline.Snapshot result = firestore .pipeline() .collection("books") .select(add(field("soldBooks"), field("unsoldBooks")).as("totalBooks")) .execute() .get();
התנהגות
שדות חופפים
אם מקצים לביטוי כינוי שכבר מופיע במסמכים מהשלב הקודם, בשלב add_fields(...) השדה הקודם יידרס. אפשר להשתמש בזה כדי לשרשר כמה ביטויים לאותו שם שדה, למשל:
Node.js
const results = await db.pipeline()
.collection("/users")
.addFields(field('age').abs().as('age'))
.addFields(field('age').add(10).as('age'))
.execute();
שדות בתוך שדות
אפשר לעדכן שדות מקוננים (לדוגמה, שדות עם תחביר .) כחלק מהשלב הזה. כך אפשר לעדכן שדה 'במקום', למשל:
Node.js
const results = await db.pipeline()
.collection("/users")
.addFields(field('address.city').toLower().as('address.city'))
.execute();
הקצאת ביטוי לשדה מקונן תיצור באופן מרומז גם שדות אב חסרים.