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

MongoDB-এ নেস্টেড অ্যারে অ্যাগ্রিগেট করার পদ্ধতি


গভীর নেস্টেড অ্যারে অ্যাগ্রিগেশন

MongoDB-এ একাধিক লেভেল নেস্টেড অ্যারে প্রক্রিয়া করতে aggregate() পাইপলাইনে $addFields, $map, $let, $cond ইত্যাদি ব্যবহার করা হয়।

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

> db.demo441.insertOne({
    "Name": "David", "Age": 21,
    "details": [{
        "id": 1, "CountryName": "US",
        "details1": [
            { "SubjectName": "MySQL", "Score": 56 },
            { "SubjectName": "MongoDB", "Score": 78 }
        ]
    }]
})

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

> db.demo441.find()

আউটপুট:

{ "_id": ObjectId("..."), "Name": "David", "Age": 21, "details": [{ "id": 1, "CountryName": "US", "details1": [{ "SubjectName": "MySQL", "Score": 56 }, { "SubjectName": "MongoDB", "Score": 78 }] }] }

নেস্টেড অ্যারে অ্যাগ্রিগেশন কোয়েরি

> db.demo441.aggregate([
    { $addFields: {
        ResultOfDetails: {
            $map: {
                input: "$details",
                as: "output",
                in: {
                    id: "$$output.id",
                    CountryName: "$$output.CountryName",
                    details1: {
                        $let: {
                            vars: {
                                last: { $arrayElemAt: ["$$output.details1", -1] }
                            },
                            in: {
                                $cond: [
                                    { $eq: ["$$last.Score", 78] },
                                    ["$$last"],
                                    []
                                ]
                            }
                        }
                    }
                }
            }
        }
    }}
]).pretty()

ফলাফল:

{ "_id": ObjectId("..."), "Name": "David", "Age": 21, "details": [...], "ResultOfDetails": [{ "id": 1, "CountryName": "US", "details1": [{ "SubjectName": "MongoDB", "Score": 78 }] }] }

ব্যাখ্যা

  • $map: বাইরের details অ্যারে ইটারেট করে
  • $let: ভেরিয়েবল ডিক্লেয়ার করে (last = শেষ এলিমেন্ট)
  • $arrayElemAt: [..., -1]: অ্যারের শেষ এলিমেন্ট নেয়
  • $cond: শর্ত পূরণ হলে (Score 78) সেই এলিমেন্ট রাখে, না হলে খালি অ্যারে
  • ফলাফলে ResultOfDetails নামে নতুন ফিল্ডে ফিল্টার করা ডেটা থাকে

জটিল নেস্টেড স্ট্রাকচার প্রক্রিয়ার জন্য এই প্যাটার্ন খুব কার্যকর।

  1. MongoDB-এ গভীর নেস্টেড অবজেক্ট (Deeply Nested Objects) কোয়েরি করা (Dot Notation)

  2. MongoDB-তে সাবডকুমেন্টের অ্যারে কুয়েরি

  3. MongoDB-এ নেস্টেড অ্যারে সর্ট করা

  4. MongoDB-তে নেস্টেড ডকুমেন্ট আপডেট করা (ডট নোটেশন + পজিশনাল $)