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

MongoDB-এ রোল (Role) অনুযায়ী শুধু Name ফিল্ড ফেচ করা

Aggregation-এ $setIsSubset ব্যবহার করে রোল-ভিত্তিক ফিল্ড ফিল্টার

MongoDB Aggregation-এ একাধিক রোল (Admin, Guest, User) থাকার পরিস্থিতিতে নির্দিষ্ট রোল (যেমন Admin) না থাকা ইউজারদের Name ফিল্ড বের করতে $setIsSubset ব্যবহার করা হয়।

নমুনা সংগ্রহ তৈরি (৩টি রোল)

> db.demo532.insertOne({"Name":"Chris","Type":"Admin"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8b4a9def4dcbee04fbbbf9") }
> db.demo532.insertOne({"Name":"David","Type":"Guest"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8b4aa3ef4dcbee04fbbbfa") }
> db.demo532.insertOne({"Name":"Bob","Type":"User"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8b4ab0ef4dcbee04fbbbfb") }

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

> db.demo532.find();

আউটপুট:


Admin রোল না থাকা ইউজারদের Name বের করা (জটিল অগ্রেশন)

> db.demo532.aggregate([
    {$group: {_id:"$Name", "types":{$addToSet:"$Type"}}},
    {$project: {_id:1, "types": 1, "isSubset": { $setIsSubset: [ ["Admin"], "$types" ] }}},
    {$match: {"isSubset": false}},
    {$group: {_id:"$isSubset", "Name": {$push : "$_id"}}},
    {$project: {"_id": 0, "Name": 1}},
    {$unwind: "$Name"}
])

ফলাফল (Admin না থাকা David এবং Bob):


ব্যাখ্যা: ১) Name দিয়ে গ্রুপ করে types অ্যারে তৈরি (Chris-এ Admin, David-এ Guest, Bob-এ User)। ২) $setIsSubset: [["Admin"], "$types"] দিয়ে চেক করা হয়েছে ["Admin"] সেটটি types-এ সাবসেট কিনা। Chris-এ true, বাকিদের false। ৩) false वालাগুলো ফিল্টার করে Name বের করা হয়েছে।

  1. MongoDB-এ নির্দিষ্ট ফিল্ড মান আপডেট করা ($set অপারেটর)

  2. MongoDB-তে $slice ব্যবহার করে ফিল্ডের রিটার্নিং ভ্যালু লিমিট করা

  3. MongoDB-এ "@email" স্ট্রিং সার্চ করা ফিল্ড ভ্যালুতে

  4. MySQL-এ বুলিয়ান কলামের ভিত্তিতে নির্দিষ্ট কলাম ফেচ করা