Giai đoạn update(...) cập nhật các tài liệu hiện có.
Ví dụ
Ví dụ: thao tác sau đây sẽ bổ sung dữ liệu cũ một thay đổi về mô hình dữ liệu cho tất cả các tài liệu trong một nhóm bộ sưu tập. Quy trình này sẽ thêm trường preferences.color vào tất cả tài liệu trong nhóm bộ sưu tập users bị thiếu trường đó.
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();
Bắt đầu
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)
Hành vi
Tất cả các giai đoạn ngôn ngữ thao tác dữ liệu (DML) đều phải nằm ở cuối quy trình.
Các tài liệu đến giai đoạn này phải có trường __name__ để xác định tài liệu cần cập nhật. Thao tác sẽ không thành công nếu bất kỳ tài liệu nào không tồn tại.
Hầu hết các giai đoạn Nhập (chẳng hạn như collection(...), collection_group(...), database(...) và documents(...)) đều bao gồm trường __name__ theo mặc định.
Bạn có thể cung cấp transformations (không bắt buộc) để áp dụng ngay trước khi ghi tài liệu. Các biểu thức này hoạt động giống hệt như việc thêm add_fields(...) ngay trước giai đoạn đầu ra cuối cùng và các biểu thức chạy trong bối cảnh của các tài liệu trước đó.
Phản hồi này bao gồm thông tin tóm tắt về số lượng tài liệu đã được sửa đổi. Ví dụ: phản hồi sau đây xác nhận rằng quy trình đã sửa đổi 3 tài liệu:
{documents_modified: 3L}
Hạn chế
Các giai đoạn DML không hỗ trợ Cloud Firestore Security Rules. Các thao tác DML thông qua Cloud Firestore Security Rules sẽ bị từ chối.
Trong giai đoạn Xem trước của tính năng này, bạn không thể chạy các giai đoạn DML trong một giao dịch. Để biết thêm thông tin về hành vi nhất quán, hãy xem phần Tính nhất quán.
Nếu giai đoạn trước giai đoạn DML tạo ra nhiều tài liệu có cùng
__name__, thì mỗi phiên bản sẽ được xử lý. Đối vớiupdate(...), điều này có nghĩa là cùng một tài liệu đích có thể được sửa đổi nhiều lần. Đối vớidelete(...), các lần thử tiếp theo sau lần đầu tiên sẽ không hoạt động.