Mô tả
Thay thế các trường trong tài liệu hiện có bằng các trường trong một biểu thức nhất định.
Biểu thức có thể là một bản đồ chữ hoặc một biểu thức đánh giá thành một bản đồ. Nếu một biểu thức nhất định không đánh giá thành một bản đồ, thì giai đoạn này sẽ trả về một lỗi.
Có 3 chế độ được hỗ trợ:
full_replace: Thay thế toàn bộ tài liệu bằng kết quả của biểu thức đã cho, bỏ qua các trường không xuất hiện trong tài liệu đó.merge_overwrite_existing: Hợp nhất biểu thức với tài liệu hiện có, ghi đè các giá trị trường trong tài liệu bằng các giá trị trong biểu thứcmerge_keep_existing: Hợp nhất biểu thức với tài liệu hiện có, chỉ thêm các giá trị trường khi không có giá trị nào trong tài liệu.
Ví dụ
Tạo một bộ sưu tập cities bằng các tài liệu sau:
Node.js
await db.collection("cities").doc("SF").set({name: "San Francisco", population: 800000, location: {country: "USA", state: "California"}});
await db.collection("cities").doc("TO").set({name: "Toronto", population: 3000000, province: "ON", location: {country: "Canada", province: "Ontario"}});
await db.collection("cities").doc("NY").set({name: "New York", location: {country: "USA", state: "New York"}});
await db.collection("cities").cov("AT").set({name: "Atlantis", population: null});
Sử dụng chế độ full_replace để nhận phiên bản đã sửa đổi của tài liệu
Trích xuất trường location lồng nhau, loại bỏ tất cả dữ liệu khác:
Node.js
const names = await db.pipeline() .collection("/cities") .replace_with(Field.of("location"), "full_replace") .execute();
Java
Pipeline.Snapshot names = firestore.pipeline().collection("cities").replaceWith(field("location")).execute().get();
Bắt đầu
snapshot := client.Pipeline(). Collection("cities"). ReplaceWith(firestore.FieldOf("location")). Execute(ctx)
Điều này tạo ra các tài liệu sau:
{ country: "USA", state: "California" },
{ country: "Canada", province: "Ontario" },
{ country: "USA", state: "New York" },
{ }
Sử dụng chế độ merge_overwrite_existing để đặt các trường
Đặt trường population của tất cả tài liệu thành 0, ghi đè các giá trị hiện có:
Node.js
const censoredResults = await db.pipeline() .collection("/cities") .replace_with(map("population", 0), "merge_overwrite_existing") .execute();
Điều này tạo ra các tài liệu sau:
{name: "San Francisco", population: 0, location: {country: "USA", state: "California"}},
{name: "Toronto", population: 0, province: "ON", location: {country: "Canada", province: "Ontario"}},
{name: "New York", population: 0, location: {country: "USA", state: "New York"}},
{name: "Atlantis", population: 0}
Sử dụng chế độ merge_keep_existing để thêm giá trị mặc định
Đặt giá trị mặc định cho location khi giá trị này không xuất hiện trong tài liệu:
Node.js
const defaultedResults = await db.pipeline() .collection("/cities") .replace_with(map("location", "unknown"), "merge_keep_existing") .execute();
Điều này tạo ra các tài liệu sau:
{ name: "San Francisco", population: 800000, location: { country: "USA", state: "California" } },
{ name: "Toronto", province: "ON", population: 3000000, location: { country: "Canada", province: "Ontario" } },
{ name: "New York", location: { country: "USA", state: "New York" } },
{ name: "Atlantis", population: null, location: "unknown" }