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

MongoDB-এ সাবডকুমেন্ট অ্যারের nth এলিমেন্ট (ভেরিয়েবল ইনডেক্স) কোয়েরি করা

MongoDB-এ সাবডকুমেন্ট অ্যারের ভেরিয়েবল ইনডেক্স (nth এলিমেন্ট) কোয়েরি করতে $let (ভেরিয়েবল ডিক্লেয়ার) এবং $expr (অগেটিগেশন এক্সপ্রেশন) ব্যবহার করা হয়। $arrayElemAt দিয়ে নির্দিষ্ট ইনডেক্সের এলিমেন্ট এক্সেস করা যায়।

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

> db.demo72.insertOne({
  StudentDetails: [
    { "Name": "Chris", "Age": 21 },
    { "Name": "David", "Age": 23 },
    { "Name": "Bob", "Age": 20 }
  ]
});
{ "acknowledged": true, "insertedId": ObjectId("5e29b4ad71bf0181ecc42269") }

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

> db.demo72.find().pretty();

আউটপুট:

{ 
  "_id": ObjectId("5e29b4ad71bf0181ecc42269"), 
  "StudentDetails": [ 
    { "Name": "Chris", "Age": 21 }, 
    { "Name": "David", "Age": 23 }, 
    { "Name": "Bob", "Age": 20 } 
  ] 
}

nth এলিমেন্ট (ইনডেক্স ১) কোয়েরি করা

ইনডেক্স ১ (দ্বিতীয় এলিমেন্ট) এর Name ফিল্ড "David" কিনা চেক করা:

> db.demo72.find({
  $expr: {
    $let: {
      vars: { 
        fst: { $arrayElemAt: [ "$StudentDetails", 1 ] } 
      },
      in: { $eq: [ "$$fst.Name", "David" ] }
    }
  }
})

ফলাফল

{ 
  "_id": ObjectId("5e29b4ad71bf0181ecc42269"), 
  "StudentDetails": [ 
    { "Name": "Chris", "Age": 21 }, 
    { "Name": "David", "Age": 23 }, 
    { "Name": "Bob", "Age": 20 } 
  ] 
}

ব্যাখ্যা:

  • $arrayElemAt: [ "$StudentDetails", 1 ] - StudentDetails অ্যারের ইনডেক্স ১ (দ্বিতীয় এলিমেন্ট) এক্সট্রাক্ট করে।
  • $let - ভেরিয়েবল fst ডিক্লেয়ার করে এক্সট্রাক্ট করা এলিমেন্ট ধরে রাখে।
  • $expr - অ্যাগ্রিগেশন এক্সপ্রেশন কোয়েরি ল্যাঙ্গুয়েজে ব্যবহার করার অনুমতি দেয়।
  • $eq: [ "$$fst.Name", "David" ] - ভেরিয়েবলের Name ফিল্ড "David" কিনা চেক করে।

ডাইনামিক ইনডেক্স (ফিল্ড থেকে ইনডেক্স নেওয়া)

যদি ইনডেক্স অন্য ফিল্ড থেকে আসে:

db.demo72.find({
  $expr: {
    $let: {
      vars: { 
        idx: "$someIndexField", 
        elem: { $arrayElemAt: [ "$StudentDetails", "$$idx" ] } 
      },
      in: { $eq: [ "$$elem.Name", "David" ] }
    }
  }
});

সতর্কতা

$expr ব্যবহার করা কোয়েরি ইন্ডেক্স ব্যবহার করতে পারে না (COLLSCAN হবে)। বড় ডেটাসেটের জন্য পারফরম্যান্স বিবেচনা করুন।

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

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

  3. MongoDB-তে $slice ব্যবহার করে অ্যারে থেকে একমাত্র এলিমেন্ট বের করা

  4. MongoDB-তে অ্যাগ্রিগেশন দিয়ে অ্যারে এলিমেন্টের গড় (Average) বের করা ($avg)