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

MongoDB-এ দুই লেভেল গভীর রেকর্ড খুঁজে বের করা


গভীর নেস্টেড অবজেক্টে সার্চ: $where (জাভাস্ক্রিপ্ট)

MongoDB-এ যখন নেস্টেড স্ট্রাকচারের পথ Фиিক্সড না থাকে বা ডাইনামিকভাবে সব প্রোপার্টি চেক করতে হয়, তখন $where দিয়ে জাভাস্ক্রিপ্ট ফাংশন লিখে সার্চ করা যায়।

নমুনা ডেটা তৈরি

> db.demo468.insertOne({
    _id: new ObjectId(),
    "FirstPosition": { "StudentName": "Chris", "StudentAge": 23 },
    "SecondPosition": { "StudentName": "David", "StudentAge": 20 }
})
> db.demo468.insertOne({
    _id: new ObjectId(),
    "FirstPosition": { "StudentName": "Carol", "StudentAge": 21 },
    "SecondPosition": { "StudentName": "John", "StudentAge": 22 }
})

সমস্ত ডকুমেন্ট দেখানো

> db.demo468.find()

আউটপুট:

{ "_id": ObjectId("..."), "FirstPosition": { "StudentName": "Chris", "StudentAge": 23 }, "SecondPosition": { "StudentName": "David", "StudentAge": 20 } }
{ "_id": ObjectId("..."), "FirstPosition": { "StudentName": "Carol", "StudentAge": 21 }, "SecondPosition": { "StudentName": "John", "StudentAge": 22 } }

যেকোনো লেভেলে "John" খুঁজে বের করার কোয়েরি

> db.demo468.find({
    $where: function() {
        for (var i in this) {
            if (this[i]["StudentName"] == "John") {
                return true;
            }
        }
        return false;
    }
})

ফলাফল:

{ "_id": ObjectId("..."), "FirstPosition": { "StudentName": "Carol", "StudentAge": 21 }, "SecondPosition": { "StudentName": "John", "StudentAge": 22 } }

ব্যাখ্যা

  • $where: জাভাস্ক্রিপ্ট ফাংশন এক্সিকিউট করে প্রতিটি ডকুমেন্টের জন্য
  • for (var i in this): ডকুমেন্টের সব টপ-লেভেল কী (FirstPosition, SecondPosition) এর মাধ্যমে লুপ করে
  • this[i]["StudentName"]: প্রতিটি সাব-অবজেক্টের StudentName চেক করে

⚠️ সতর্কতা

  • $where খুব ধীর (ইনডেক্স ব্যবহার করে না, ফুল কোলেকশন স্ক্যান)
  • সিকিউরিটি রিস্ক: জাভাস্ক্রিপ্ট ইনজেকশন সম্ভব
  • বিকল্প: স্কিমা রিডিজাইন করে ফ্ল্যাট ফিল্ড রাখুন বা $or দিয়ে সব পথ স্পেসিফাই করুন: { $or: [ { "FirstPosition.StudentName": "John" }, { "SecondPosition.StudentName": "John" } ] }

শুধু জরুরি হলে এবং ছোট ডেটাসেটে ব্যবহার করুন।

  1. MongoDB 3.x-এ ডুপ্লিকেট রেকর্ড রিমুভ করা

  2. MongoDB-এ ডকুমেন্ট আপডেট করার পদ্ধতি

  3. MongoDB-তে ডকুমেন্টে এলিমেন্ট অস্তিত্ব যাচাই

  4. MongoDB-এ সাব-ডকুমেন্টসে ফাইন্ড কোয়েরি চালানো