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

MongoDB-এ অ্যারের সকল এলিমেন্ট নির্দিষ্ট শর্ত পূরণ করলে ডকুমেন্ট কিভাবে বের করবেন?

MongoDB-এ অ্যারের সকল এলিমেন্ট নির্দিষ্ট শর্ত (যেমন: ৪৫-এর বেশি) পূরণ করলে ডকুমেন্ট বের করতে সরাসরি ক্যোয়ারি ব্যবহার করা যাবে না, কারণ MongoDB ডিফল্টভাবে অ্যারেতে কোনো একটি এলিমেন্ট শর্ত পূরণ করলে ডকুমেন্টটি ফেরত দেয়।

উদাহরণ

বিভিন্ন স্কোর সহ ডকুমেন্ট তৈরি করুন:

> db.arrayElementsNotGreaterThanDemo.insertOne({"Scores":[89,43,32,45]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd9e9f9b50a6c6dd317adb3") }

> db.arrayElementsNotGreaterThanDemo.insertOne({"Scores":[32,33,34,40]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd9ea13b50a6c6dd317adb4") }

> db.arrayElementsNotGreaterThanDemo.insertOne({"Scores":[45,56,66,69]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd9ea25b50a6c6dd317adb5") }

> db.arrayElementsNotGreaterThanDemo.insertOne({"Scores":[46,66,77,88]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd9ea3cb50a6c6dd317adb6") }

সকল ডকুমেন্ট দেখুন:

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

আউটপুট:

{ "_id" : ObjectId("5cd9e9f9b50a6c6dd317adb3"), "Scores" : [ 89, 43, 32, 45 ] }
{ "_id" : ObjectId("5cd9ea13b50a6c6dd317adb4"), "Scores" : [ 32, 33, 34, 40 ] }
{ "_id" : ObjectId("5cd9ea25b50a6c6dd317adb5"), "Scores" : [ 45, 56, 66, 69 ] }
{ "_id" : ObjectId("5cd9ea3cb50a6c6dd317adb6"), "Scores" : [ 46, 66, 77, 88 ] }

$gt: 45 ক্যোয়ারি চালানোর ফলাফল (ভুল ধারণা)

> db.arrayElementsNotGreaterThanDemo.find({Scores: {$gt: 45}});

আউটপুট:

{ "_id" : ObjectId("5cd9e9f9b50a6c6dd317adb3"), "Scores" : [ 89, 43, 32, 45 ] }
{ "_id" : ObjectId("5cd9ea25b50a6c6dd317adb5"), "Scores" : [ 45, 56, 66, 69 ] }
{ "_id" : ObjectId("5cd9ea3cb50a6c6dd317adb6"), "Scores" : [ 46, 66, 77, 88 ] }

সমস্যা: প্রথম এবং তৃতীয় ডকুমেন্টে ৪৫-এর নিচের মান রয়েছে (৪৩, ৩২, ৪৫), কিন্তু এগুলো ফলাফলে এসেছে। কারণ MongoDB অ্যারেতে কোনো একটি এলিমেন্ট শর্ত পূরণ করলে ডকুমেন্টটি ফেরত দেয়।

সঠিক সমাধান: $not + $elemMatch + $lte

অ্যারের কোনো এলিমেন্টই ৪৫ বা তার নিচে নেই — অর্থাৎ সকল এলিমেন্ট ৪৫-এর বেশি:

> db.arrayElementsNotGreaterThanDemo.find({
    Scores: {
        $not: {
            $elemMatch: { $lte: 45 }
        }
    }
});

সঠিক আউটপুট:

{ "_id" : ObjectId("5cd9ea3cb50a6c6dd317adb6"), "Scores" : [ 46, 66, 77, 88 ] }

ব্যাখ্যা: শুধু চতুর্থ ডকুমেন্টের সকল এলিমেন্ট ৪৫-এর বেশি।

নোট: MongoDB ৩.৬+ এ $all এবং $elemMatch কম্বিনেশনও ব্যবহার করা যায়, কিন্তু উপরের পদ্ধতিটি সবচেয়ে সরল এবং কার্যকর।

  1. MongoDB-এ শুধু ইন্টিজার টাইপের এজ ফিল্ডवाले ডকুমেন্ট বের করা

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

  3. MongoDB-তে $elemMatch ব্যবহার করে অ্যারে ভ্যালু অনুযায়ী ডকুমেন্ট ফিল্টার করা

  4. পাইথন প্রোগ্রাম - অ্যারেতে x-র চেয়ে ছোট সব মান ফিল্টার করুন