কম্পিউটার টিউটোরিয়াল

MongoDB-এ প্রোপার্টি ID এবং রেকর্ড ID সমান থাকা ডকুমেন্ট খুঁজে বের করা

MongoDB-এ একটি ডকুমেন্টের _id ফিল্ড এবং তার নেস্টেড প্রোপার্টি (যেমন Details.id) সমান কিনা চেক করতে $where ক্লজে জাভাস্ক্রিপ্ট ফাংশন ব্যবহার করা হয়, কারণ সাধারণ কোয়েরি সিনট্যাক্সে ফিল্ড-টু-ফিল্ড কম্পারিজন সরাসরি সাপোর্ট করে না।

নমুনা কালেকশন তৈরি

> db.demo69.insertOne({
  "_id": ObjectId("507c7f79bcf86cd7994f6c0e"),
  "Details": { "id": ObjectId("507c7f79bcf86cd7994f6c0e") }
});
{ "acknowledged": true, "insertedId": ObjectId("507c7f79bcf86cd7994f6c0e") }

> db.demo69.insertOne({
  "_id": ObjectId("507c7f79bcf86cd7994f6c0f"),
  "Details": { "id": ObjectId("507c7f79bcf86cd7994f6c0a") }
});
{ "acknowledged": true, "insertedId": ObjectId("507c7f79bcf86cd7994f6c0f") }

ডকুমেন্টগুলো দেখানো

> db.demo69.find();

আউটপুট:

{ "_id": ObjectId("507c7f79bcf86cd7994f6c0e"), "Details": { "id": ObjectId("507c7f79bcf86cd7994f6c0e") } }
{ "_id": ObjectId("507c7f79bcf86cd7994f6c0f"), "Details": { "id": ObjectId("507c7f79bcf86cd7994f6c0a") } }

_id এবং Details.id সমান থাকা ডকুমেন্ট খুঁজে বের করা

> db.demo69.find({ 
  $where: function(){ 
    return this._id.toString() == this.Details.id.toString(); 
  } 
}).pretty();

ফলাফল

{ 
  "_id": ObjectId("507c7f79bcf86cd7994f6c0e"), 
  "Details": { "id": ObjectId("507c7f79bcf86cd7994f6c0e") } 
}

ব্যাখ্যা:

  • $where - জাভাস্ক্রিপ্ট ফাংশন এক্সিকিউট করে প্রতিটি ডকুমেন্টের জন্য।
  • this._id - ডকুমেন্টের _id।
  • this.Details.id - নেস্টেড ফিল্ড।
  • .toString() - ObjectId কে স্ট্রিংয়ে কনভার্ট করে কম্পারিজন (ObjectId ডায়রেক্ট == দিয়ে কম্পার করা যায় না)।
  • প্রথম ডকুমেন্টে _id এবং Details.id একই, তাই ম্যাচ করেছে।

সতর্কতা: $where পারফরম্যান্স

  • $where জাভাস্ক্রিপ্ট エンজিন চালায়, খুব ধীর (COLLSCAN)।
  • ইন্ডেক্স ব্যবহার করে না।
  • বড় ডেটাসেটে এড়াতে হয়।

উন্নত পদ্ধতি: অ্যাগ্রিগেশন با $expr (MongoDB ৩.৬+)

db.demo69.aggregate([
  { $match: { $expr: { $eq: [ "$_id", "$Details.id" ] } } }
]);

$expr অ্যাগ্রিগেশন এক্সপ্রেশন কোয়েরি ল্যাঙ্গুয়েজে ফিল্ড-টু-ফিল্ড কম্পারিজন সাপোর্ট করে এবং আরও দ্রুত (অপ্টিমাইজেশন সম্ভব)।

  1. MongoDB-এ সব কী ফিল্ড হিসেবে আছে কিনা যাচাই করে ডকুমেন্ট ফিল্টার করা

  2. MongoDB-এ অ্যারে-এর সব এলিমেন্ট নির্দিষ্ট ভ্যালু আছে কিনা চেক করে ডকুমেন্ট খোঁজা

  3. MongoDB-এ নির্দিষ্ট আইডি वाले সব ডকুমেন্ট আপডেট করা

  4. MongoDB-এ ইন্টিজার ভ্যালু দিয়ে ডকুমেন্ট খুঁজে বের করা