คำอธิบาย
แทนที่ช่องในเอกสารที่มีอยู่ด้วยช่องในนิพจน์ที่กำหนด
นิพจน์อาจเป็นแมปตัวอักษรหรือนิพจน์ที่ประเมินเป็นแมป หากนิพจน์ที่กำหนดไม่ได้ประเมินเป็นแมป ขั้นตอนนี้จะแสดงข้อผิดพลาด
มี 3 โหมดที่รองรับ ได้แก่
full_replace: แทนที่เอกสารทั้งหมดด้วยผลลัพธ์ของนิพจน์ที่กำหนด โดยละเว้นช่องที่ไม่ได้ปรากฏในนิพจน์merge_overwrite_existing: ผสานนิพจน์กับเอกสารที่มีอยู่ โดยเขียนทับค่าช่องในเอกสารด้วยค่าในนิพจน์merge_keep_existing: ผสานนิพจน์กับเอกสารที่มีอยู่ โดยเพิ่มค่าช่องเมื่อไม่มีค่าในเอกสารเท่านั้น
ตัวอย่าง
สร้างคอลเล็กชัน cities ที่มีเอกสารต่อไปนี้
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});
ใช้โหมด full_replace เพื่อรับเอกสารเวอร์ชันที่เปลี่ยนแปลง
แยกช่อง location ที่ซ้อนกัน โดยทิ้งข้อมูลอื่นๆ ทั้งหมด
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();
Go
snapshot := client.Pipeline(). Collection("cities"). ReplaceWith(firestore.FieldOf("location")). Execute(ctx)
ซึ่งจะสร้างเอกสารต่อไปนี้
{ country: "USA", state: "California" },
{ country: "Canada", province: "Ontario" },
{ country: "USA", state: "New York" },
{ }
ใช้โหมด merge_overwrite_existing เพื่อตั้งค่าช่อง
ตั้งค่าช่อง population ของเอกสารทั้งหมดเป็น 0 โดยเขียนทับค่าที่มีอยู่
Node.js
const censoredResults = await db.pipeline() .collection("/cities") .replace_with(map("population", 0), "merge_overwrite_existing") .execute();
ซึ่งจะสร้างเอกสารต่อไปนี้
{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}
ใช้โหมด merge_keep_existing เพื่อเพิ่มค่าเริ่มต้น
การตั้งค่าเริ่มต้นสำหรับ location เมื่อไม่ปรากฏใน เอกสาร
Node.js
const defaultedResults = await db.pipeline() .collection("/cities") .replace_with(map("location", "unknown"), "merge_keep_existing") .execute();
ซึ่งจะสร้างเอกสารต่อไปนี้
{ 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" }