בשלב update(...) מתעדכנים מסמכים קיימים.
דוגמאות
לדוגמה, הפעולה הבאה מבצעת מילוי חוזר של שינוי במודל נתונים לכל המסמכים בקבוצת אוספים. הצינור מוסיף שדה preferences.color לכל המסמכים בקבוצת האוספים users שחסר להם השדה הזה.
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();
המשך
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 בטרנזקציה. מידע נוסף על התנהגות העקביות זמין במאמר בנושא עקביות.
אם השלב שלפני שלב ה-DML יוצר כמה מסמכים עם אותו
__name__, כל מופע מעובד. במקרה שלupdate(...), יכול להיות שאותו מסמך יעד ישונה כמה פעמים. במקרה שלdelete(...), ניסיונות חוזרים אחרי הניסיון הראשון לא יבצעו פעולה.