مونگو ڈی یو بی دستاویز ڈیٹا کی اپ ڈیٹنگ

یہ باب مونگو ڈی یو بی دستاویز ڈیٹا کو مونگو شیل کے ذریعے اپ ڈیٹ کرنے کا تعارف کراتا ہے۔ مونگو ڈی یو بی مختلف قسم کے اوپریٹرز کی تصدیق کرتا ہے جنہیں مختلف اپ ڈیٹ فنکشنز کی تنظیم کرتا ہے۔

ٹیسٹ ڈیٹا کی تیاری

انوینٹری کلیکشن میں ایک بیچ ٹیسٹ ڈیٹا شامل کریں۔

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" }
] );

اپ ڈیٹنگ اوپریٹر سنٹیکس

مونگو ڈی یو بی داستانے کو اپ ڈیٹ کرنے کے لئے مختلف اپ ڈیٹ اوپریٹرز (مثلاً $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 فیلڈ شامل کرتے ہیں تو id قیمت، بدلنے والی دستاویز کے id کے ساتھ موزوں ہونا چاہئے۔

db.inventory.replaceOne(
   { item: "paper" },
   { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 40 } ] }
)

تشریح:

  • سب سے پہلے، کوئیری معیار (item=paper) کا استعمال کر کے پہلا دستاویز حاصل کریں۔
  • replaceOne میتھڈ کے دوسرے پیرامیٹر کی مواد سے میچ ہونے والی دستاویز کو تبدیل کریں۔

اپ ڈیٹ رفتار

ایٹامکٹی

مانگو ڈی بی میں تمام رائٹ آپریشنز فرادی دستاویز کی سطح پر ایٹومک ہیں۔

_id فیلڈ

_id فیلڈ غیر قابل تبدیل ہے اور اسے اپ ڈیٹ نہیں کیا جا سکتا۔