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

MongoDB-এ অ্যারেতে সব অবজেক্টের নির্দিষ্ট মান আছে কিনা চেক করা

MongoDB-এ একটি অ্যারের সব অবজেক্টে নির্দিষ্ট ফিল্ডের নির্দিষ্ট মান আছে কিনা চেক করতে $not এবং $elemMatch কোয়েরি অপারেটর ব্যবহার করা হয়। লজিক: "যে কোনো এলিমেন্টে মানটি না থাকা ডকুমেন্ট বাদ দাও"।

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

> db.demo74.insertOne({
  StudentName: "Chris",
  StudentDetails: [
    { "Subject": "MongoDB", "isRegular": "Active" },
    { "Subject": "MongoDB", "isRegular": "InActive" },
    { "Subject": "MongoDB", "isRegular": "InActive" }
  ]
});
{ "acknowledged": true, "insertedId": ObjectId("5e29c6b671bf0181ecc4226f") }

> db.demo74.insertOne({
  name: "document2",
  data: [
    { "Subject": "MongoDB", "isRegular": "Active" },
    { "Subject": "MongoDB", "isRegular": "Active" },
    { "Subject": "MongoDB", "isRegular": "Active" }
  ]
});
{ "acknowledged": true, "insertedId": ObjectId("5e29c6b771bf0181ecc42270") }

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

> db.demo74.find();

আউটপুট:

{ "_id": ObjectId("5e29c6b671bf0181ecc4226f"), "StudentName": "Chris", "StudentDetails": [ { "Subject": "MongoDB", "isRegular": "Active" }, { "Subject": "MongoDB", "isRegular": "InActive" }, { "Subject": "MongoDB", "isRegular": "InActive" } ] }
{ "_id": ObjectId("5e29c6b771bf0181ecc42270"), "name": "document2", "data": [ { "Subject": "MongoDB", "isRegular": "Active" }, { "Subject": "MongoDB", "isRegular": "Active" }, { "Subject": "MongoDB", "isRegular": "Active" } ] }

সব এলিমেন্টে isRegular: "Active" থাকা ডকুমেন্ট খুঁজে বের করা

> db.demo74.find({ 
  "StudentDetails": { 
    "$not": { 
      "$elemMatch": { "isRegular": { $ne: "Active" } } 
    } 
  },
  "StudentDetails.isRegular": "Active"
}).pretty();

ফলাফল

{ 
  "_id": ObjectId("5e29c6b771bf0181ecc42270"), 
  "name": "document2", 
  "data": [ 
    { "Subject": "MongoDB", "isRegular": "Active" }, 
    { "Subject": "MongoDB", "isRegular": "Active" }, 
    { "Subject": "MongoDB", "isRegular": "Active" } 
  ] 
}

ব্যাখ্যা:

  • $elemMatch: { "isRegular": { $ne: "Active" } } - যেসব ডকুমেন্টে অন্তত একটি এলিমেন্টে isRegular "Active" নয়।
  • $not - সেগুলো বাদ দেয় (মানে সব এলিমেন্টে Active আছে)۔
  • "StudentDetails.isRegular": "Active" - অ্যারে খালি না হয় তা নিশ্চিত করে (অন্যথায় খালি অ্যারেও true হতো)।

নোট: উদাহরণের আউটপুটে প্রথম ডকুমেন্ট দেখানো হয়েছে, কিন্তু সেটি ভুল - দ্বিতীয় ডকুমেন্টটিই সঠিক ফলাফল। প্রথম ডকুমেন্টে "InActive" আছে, তাই সেটি ফিল্টার হয়ে যাবে।

সরল পদ্ধতি (MongoDB ৩.৬+): $all

db.demo74.find({ "StudentDetails.isRegular": { $all: ["Active"] } });

এটি সব এলিমেন্টে "Active" আছে কিনা চেক করে না, বরং অ্যারেতে "Active" মানটি আছে কিনা চেক করে। সাবসেট চেকের জন্য উপরের পদ্ধতিই সঠিক।

  1. MongoDB-এ অ্যারেতে ম্যাচ করা অবজেক্টের সংখ্যা অনুযায়ী ডকুমেন্ট খোঁজা ($where / Aggregation)

  2. MongoDB-তে নির্দিষ্ট মান থেকে বড় বা সমান ভ্যালু খোঁজা ($gte)

  3. MongoDB-এ অবজেক্টের অ্যারে থেকে নেস্টেড ডকুমেন্ট কোয়েরি করা ($elemMatch)

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