ระยะ 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();
Go
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(...) ก่อนระยะเอาต์พุตสุดท้าย และ
นิพจน์จะทำงานในบริบทของเอกสารก่อนหน้า
การตอบกลับจะมีข้อมูลสรุปจำนวนเอกสารที่แก้ไข ตัวอย่างเช่น การตอบกลับต่อไปนี้ยืนยันว่าไปป์ไลน์ได้แก้ไขเอกสาร 3 ฉบับ
{documents_modified: 3L}
ข้อจำกัด
ระยะ DML ไม่รองรับ Cloud Firestore Security Rules ระบบจะปฏิเสธการพยายามดำเนินการ DML ผ่าน Cloud Firestore Security Rules
ในระหว่างพรีวิวฟีเจอร์นี้ คุณจะไม่สามารถเรียกใช้ระยะ DML ในธุรกรรมได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับลักษณะการทำงานที่สอดคล้องกันได้ที่ ความสอดคล้องกัน
หากระยะก่อนหน้าระยะ DML สร้างเอกสารหลายฉบับที่มี
__name__เหมือนกัน ระบบจะประมวลผลแต่ละอินสแตนซ์ สำหรับupdate(...)หมายความว่าระบบอาจแก้ไขเอกสารเป้าหมายเดียวกันหลายครั้ง สำหรับdelete(...)การพยายามครั้งต่อๆ ไปหลังจากครั้งแรกจะไม่มีการดำเนินการ