Mô tả
Thêm các trường mới vào tài liệu do giai đoạn trước tạo ra.
Tài liệu được tạo sẽ chứa tất cả các trường từ giai đoạn trước cùng với tất cả các trường mới được thêm, ghi đè mọi trường có cùng tên với tài liệu trước đó. Giai đoạn add_fields(...) cho phép cập nhật
các trường lồng nhau bằng cách chỉ định tên trường lồng nhau làm bí danh.
Ví dụ
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();
Bắt đầu
snapshot := client.Pipeline(). Collection("books"). Select(firestore.Fields( firestore.Add(firestore.FieldOf("soldBooks"), firestore.FieldOf("unsoldBooks")).As("totalBooks"), )). Execute(ctx)
Hành vi
Các trường trùng lặp
Việc gán cho một biểu thức một bí danh đã có trong tài liệu từ giai đoạn trước sẽ khiến giai đoạn add_fields(...) ghi đè lên trường trước đó. Bạn có thể dùng cách này để liên kết nhiều biểu thức trên cùng một tên trường, chẳng hạn như:
Node.js
const results = await db.pipeline()
.collection("/users")
.addFields(field('age').abs().as('age'))
.addFields(field('age').add(10).as('age'))
.execute();
Trường lồng nhau
Bạn có thể cập nhật các trường lồng nhau (ví dụ: những trường có cú pháp .) trong giai đoạn này. Điều này giúp bạn có thể cập nhật một trường "tại chỗ", chẳng hạn như trong:
Node.js
const results = await db.pipeline()
.collection("/users")
.addFields(field('address.city').toLower().as('address.city'))
.execute();
Việc chỉ định một biểu thức cho một trường lồng nhau cũng sẽ ngầm tạo mọi trường mẹ bị thiếu.