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 ব্যবহার করুন।