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

MongoDB-এ অ্যারে-র ভেতর রেঞ্জ (Range) কোয়েরি: $gt এবং $lt ব্যবহার


MongoDB-এ $elemMatch দিয়ে অ্যারে-র ভেতর রেঞ্জ কোয়েরি করা

MongoDB-এ একটি অ্যারে ফিল্ডের ভেতরে থাকা অবজেক্টের সংখ্যাগত ফিল্ডে রেঞ্জ (Range) কোয়েরি (যেমন: 600 থেকে 900 এর মধ্যে) করার জন্য $elemMatch ব্যবহার করা হয়। এটি নিশ্চিত করে যে অ্যারে-র একই এলিমেন্ট দুটি শর্ত পূরণ করছে।

১. কালেকশন ও নেস্টেড অ্যারে ডেটা তৈরি

> db.demo341.insertOne({
  "Name": "Chris",
  "productDetails": [
    { "ProductPrice": { "Price": 800 } },
    { "ProductPrice": { "Price": 400 } },
    { "ProductPrice": { "Price": 300 } }
  ]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e53ed5cf8647eb59e5620a7") }
> db.demo341.insertOne({
  "Name": "Chris",
  "productDetails": [
    { "ProductPrice": { "Price": 1000 } },
    { "ProductPrice": { "Price": 1200 } },
    { "ProductPrice": { "Price": 1300 } }
  ]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e53edc1f8647eb59e5620a8") }

২. সব ডকুমেন্ট দেখানো

> db.demo341.find();

আউটপুট:

{ "_id" : ObjectId("5e53ed5cf8647eb59e5620a7"), "Name" : "Chris", "productDetails" : [ { "ProductPrice" : { "Price" : 800 } }, { "ProductPrice" : { "Price" : 400 } }, { "ProductPrice" : { "Price" : 300 } } ] }
{ "_id" : ObjectId("5e53edc1f8647eb59e5620a8"), "Name" : "Chris", "productDetails" : [ { "ProductPrice" : { "Price" : 1000 } }, { "ProductPrice" : { "Price" : 1200 } }, { "ProductPrice" : { "Price" : 1300 } } ] }

৩. এগ্রিগেশন কোয়েরি: Price 600 থেকে 900 এর মধ্যে থাকা এলিমেন্ট সহ ডকুমেন্ট

> db.demo341.aggregate([
  { "$match": {
      "productDetails": {
        "$elemMatch": {
          "ProductPrice.Price": { "$gt": 600, "$lt": 900 }
        }
      }
  }}
]).pretty();

কেন $elemMatch? যদি শুধু {"productDetails.ProductPrice.Price": {$gt: 600, $lt: 900}} লিখতাম, তবে MongoDB আলাদা আলাদা এলিমেন্ট থেকে শর্ত পূরণ করলে ও মানে নিত (যেমন একটি এলিমেন্টে 800, অন্যটিতে 400 থাকলেও মানে নিত)। $elemMatch নিশ্চিত করে একই এলিমেন্টে দুটি শর্ত পূরণ হয়।

৪. ফলাফল

{ "_id" : ObjectId("5e53ed5cf8647eb59e5620a7"), "Name" : "Chris", "productDetails" : [ { "ProductPrice" : { "Price" : 800 } }, { "ProductPrice" : { "Price" : 400 } }, { "ProductPrice" : { "Price" : 300 } } ] }

প্রথম ডকুমেন্ট ফেরত এসেছে কারণ এর অ্যারে-তে Price 800 আছে (600-900 এর মধ্যে)। দ্বিতীয় ডকুমেন্টের সব প্রাইস 1000+ হওয়ায় ফলাফলে আসেনি।


  1. MongoDB-এ অ্যারে-র নির্দিষ্ট এলিমেন্ট ফিল্টার করে রেঞ্জ কোয়েরি করা ($filter, $match)

  2. MongoDB-এ সাব-ডকুমেন্ট খুঁজে বের করা নির্দিষ্ট শর্ত অনুযায়ী ($filter, $match)

  3. MongoDB-এ অ্যারে অবজেক্টের মধ্যে একাধিক শর্ত ম্যাচ করা

  4. MongoDB-এ অ্যারে কোয়েরি করে নির্দিষ্ট ভ্যালু ফেচ করা