الوصف
يستبدل الحقول في المستند الحالي بالحقول في تعبير معيّن.
يمكن أن يكون التعبير إما خريطة حرفية أو تعبيرًا يتم تقييمه إلى خريطة. إذا لم يتم تقييم تعبير معيّن إلى خريطة، ستعرض هذه المرحلة خطأً.
تتوفّر 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();
متابعة
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" }