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

MongoDB-এ অ্যারেতে নেস্টেড ডকুমেন্ট থাকা ডকুমেন্ট খুঁজে বের করা


অ্যারে অবজেক্টের নেস্টেড ফিল্ড দিয়ে ফিল্টার: ডট নোটেশন

MongoDB-এ অ্যারে অবজেক্টের ভেতরে আবার অবজেক্ট থাকলে (নেস্টেড), ডট নোটেশন চেইন করে find() এ ফিল্টার করা যায়।

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

> db.demo465.insertOne({
    id: 101,
    details: [
        { Name: "Chris", Info: { Subject: "MongoDB", Marks: 67 } },
        { Name: "David", Info: { Subject: "MySQL", Marks: 78 } }
    ]
})
> db.demo465.insertOne({
    id: 102,
    details: [
        { Name: "Bob", Info: { Subject: "Java", Marks: 45 } },
        { Name: "Carol", Info: { Subject: "C", Marks: 67 } }
    ]
})

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

> db.demo465.find()

আউটপুট:

{ "_id": ObjectId("..."), "id": 101, "details": [{ "Name": "Chris", "Info": { "Subject": "MongoDB", "Marks": 67 } }, { "Name": "David", "Info": { "Subject": "MySQL", "Marks": 78 } }] }
{ "_id": ObjectId("..."), "id": 102, "details": [{ "Name": "Bob", "Info": { "Subject": "Java", "Marks": 45 } }, { "Name": "Carol", "Info": { "Subject": "C", "Marks": 67 } }] }

"Bob" নামের ডিটেইলস থাকা ডকুমেন্ট খুঁজে বের করা

> db.demo465.find({ "details.Name": "Bob" })

ফলাফল:

{ "_id": ObjectId("..."), "id": 102, "details": [{ "Name": "Bob", "Info": { "Subject": "Java", "Marks": 45 } }, { "Name": "Carol", "Info": { "Subject": "C", "Marks": 67 } }] }

ব্যাখ্যা

  • details.Name: অ্যারে details এর প্রতিটি এলিমেন্টের Name ফিল্ড চেক করে
  • যদি অ্যারেতে একাধিক এলিমেন্টে "Bob" থাকে, তবে ডকুমেন্ট একবারই রিটার্ন হবে
  • যদি নেস্টেড অবজেক্টের ফিল্ড দিয়ে ফিল্টার করতে হয়: { "details.Info.Subject": "Java" }
  • এটি $elemMatch ছাড়া সিম্পল কোয়েরি, কিন্তু একই এলিমেন্টে একাধিক শর্ত চেক করতে হলে $elemMatch লাগবে

সিম্পল ফিল্টারিংয়ের জন্য ডট নোটেশন সবচেয়ে সহজ এবং দ্রুত।

  1. MongoDB-এ অবজেক্ট অ্যারে থেকে নির্দিষ্ট আইটেম বের করা

  2. MongoDB-তে অ্যারে ইন্টারসেকশনের ডেটা পাওয়া

  3. MongoDB-এ ডুপ্লিকেট নামের স্কোর যোগ করে ডিস্টিংক্ট জোড়া বের করা

  4. MongoDB-এ অ্যারে ফিল্ডে সব এলিমেন্ট ম্যাচ করা ($all অপারেটর)