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

MongoDB-এ $elemMatch প্রজেকশনে ব্যবহার করে মিলা উপাদান শুধু আনা

MongoDB Find প্রজেকশনে $elemMatch ব্যবহার

প্রজেকশনে $elemMatch ব্যবহার করলে অ্যারেতে শুধু কোয়ারি মিলা উপাদানটি (প্রথমটি) রিটার্ন হয়। পুরো অ্যারে না আনা হয়ে শুধু প্রয়োজনীয় অংশ আনা যায়।

উদাহরণ: ডেটা ইনসার্ট

> db.demo313.insertOne({"_id":100,"details":[{"Name":"Chris","Age":24}]});
{ "acknowledged" : true, "insertedId" : 100 }
> db.demo313.insertOne({"_id":101,"details":[{"Name":"David","Age":22}]});
{ "acknowledged" : true, "insertedId" : 101 }
> db.demo313.insertOne({"_id":102,"details":[{"Name":"Mike","Age":25}]});
{ "acknowledged" : true, "insertedId" : 102 }

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

> db.demo313.find();

আউটপুট:

{ "_id" : 100, "details" : [ { "Name" : "Chris", "Age" : 24 } ] }
{ "_id" : 101, "details" : [ { "Name" : "David", "Age" : 22 } ] }
{ "_id" : ObjectId("5e4d685b5d93261e4bc9ea4c"), "id" : 102, "details" : [ { "Name" : "Mike", "Age" : 25 } ] }

প্রজেকশনে $elemMatch (Age=22 মিলা উপাদান শুধু)

db.demo313.find({_id:101},{details: { $elemMatch: { Age: 22 } } } );

আউটপুট:

{ "_id" : 101, "details" : [ { "Name" : "David", "Age" : 22 } ] }

ব্যাখ্যা

  • {_id:101} — কোয়ারি: শুধু এই ডকুমেন্ট।
  • {details: {$elemMatch: {Age:22}}} — প্রজেকশন: details অ্যারেতে যেই উপাদানে Age:22 আছে, শুধু সেটি আনা।
  • যদি একাধিক উপাদান মিলে, শুধু প্রথমটি রিটার্ন হয়।

সীমাবদ্ধতা: $elemMatch প্রজেকশনে নেস্টেড অ্যারে বা একাধিক লেভেল ডিপে কাজ করে না। সেক্ষেত্রে এggregেশন $filter ব্যবহার করুন।

  1. MongoDB-এ অ্যারে ম্যাচের জন্য $all অপারেটর ব্যবহার করা

  2. MongoDB-এ নেস্টেড (Nested) ডকুমেন্টে শর্ত লাগানো (Dot Notation + $gt)

  3. MongoDB-তে সাব-ডকুমেন্ট দিয়ে সাব-ডকুমেন্ট ফিল্টার করা (aggregate + $unwind)

  4. MongoDB-তে নেস্টেড ডকুমেন্ট আপডেট করা (ডট নোটেশন + পজিশনাল $)