تحديث بيانات وثائق MongoDB باستخدام mongo shell
يُقدم هذا الفصل تحديث بيانات وثائق MongoDB من خلال mongo shell. تدعم MongoDB طرقًا مختلفة للتحديث من خلال أنواع مختلفة من العوامل، كما تدعم أيضًا عدة وظائف تحديث.
تجهيز البيانات التجريبية
أدخل دفعة من البيانات التجريبية في مجموعة inventory.
db.inventory.insertMany( [
{ item: "canvas", qty: 100, size: { h: 28, w: 35.5, uom: "سم" }, status: "A" },
{ item: "journal", qty: 25, size: { h: 14, w: 21, uom: "سم" }, status: "A" },
{ item: "mat", qty: 85, size: { h: 27.9, w: 35.5, uom: "سم" }, status: "A" },
{ item: "mousepad", qty: 25, size: { h: 19, w: 22.85, uom: "سم" }, status: "P" },
{ item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "بوصة" }, status: "P" },
{ item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "بوصة" }, status: "D" },
{ item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "سم" }, status: "D" },
{ item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "سم" }, status: "A" },
{ item: "sketchbook", qty: 80, size: { h: 14, w: 21, uom: "سم" }, status: "A" },
{ item: "sketch pad", qty: 95, size: { h: 22.85, w: 30.5, uom: "سم" }, status: "A" }
] );
صيغة عوامل التحديث
لتحديث الوثائق، توفر MongoDB عوامل تحديث متعددة (على سبيل المثال، $set) لتعديل قيم الحقول.
صيغة معاملات عامل التحديث هي كما يلي:
{
<عامل التحديث>: { <حقل1>: <قيمة1>, ... },
<عامل التحديث>: { <حقل2>: <قيمة2>, ... },
...
}
الشرح:
- <عامل التحديث>: عامل التحديث
- <حقل1>: اسم الحقل
- <قيمة1>: معلمة الحقل
عامل $set
يُستخدم لتحديث الوثائق وإنشاء حقل جديد إذا كان الحقل غير موجود.
تحديث وثيقة واحدة
يُحدث الوثيقة باستخدام طريقة db.collection.updateOne().
db.inventory.updateOne(
{ item: "paper" },
{
$set: { "size.uom": "سم", status: "P" },
$currentDate: { lastModified: true }
}
)
شرح التحديث:
- ابدأ بالحصول على الوثيقة الأولى باستخدام شرط الاستعلام (item = paper).
- استخدم عامل $set لتحديث قيمة حقل size.uom إلى سم وتحديث قيمة حقل status إلى P.
- استخدم عامل $currentDate لتحديث قيمة حقل lastModified إلى التاريخ الحالي. إذا لم يكن حقل lastModified موجودًا، سيقوم $currentDate بإنشاء الحقل.
تحديث عدة وثائق
استخدم طريقة db.collection.updateMany() لتحديث عدة وثائق تفي بالشرط.
db.inventory.updateMany(
{ "qty": { $lt: 50 } },
{
$set: { "size.uom": "بوصة", status: "P" },
$currentDate: { lastModified: true }
}
)
شرح التحديث:
- ابدأ بالحصول على جميع الوثائق باستخدام شرط الاستعلام (qty < 50).
- استخدم عامل $set لتحديث قيمة حقل size.uom إلى بوصة وتحديث قيمة حقل status إلى P.
- استخدم عامل $currentDate لتحديث قيمة حقل lastModified إلى التاريخ الحالي. إذا لم يكن حقل lastModified موجودًا، سيقوم $currentDate بإنشاء الحقل.
نصيحة: يُمثل عامل $lt المعنى الكمي لأقل من.
استبدال المستند
استخدم طريقة db.collection.replaceOne() لاستبدال محتوى مستند (باستثناء حقل _id). يمكن أن يحتوي المستند البديل على حقول مختلفة عن المستند الأصلي. نظرًا لأن حقل _id لا يتغير، يمكن حذفه. ومع ذلك، إذا قمت بتضمين حقل _id، يجب أن يكون قيمة الهوية متماشية مع هوية المستند الذي يتم تحديثه.
db.inventory.replaceOne(
{ item: "paper" },
{ item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 40 } ] }
)
شرح:
- أولاً، استخدم معايير الاستعلام (item=paper) لاسترجاع المستند الأول.
- استبدل المستند المطابق بمحتوى المعامل الثاني لطريقة replaceOne.
سلوك التحديث
الذرية
جميع عمليات الكتابة في MongoDB هي ذرية على مستوى المستند الفردي.
حقل _id
حقل _id لا يتغير ولا يمكن تحديثه.