MongoDB-এ $elemMatch ব্যবহার করে অ্যারেতে নেস্টেড ফিল্ড মিলানো
যদি অ্যারেতে অবজেক্ট থাকে এবং একই অবজেক্টের ভেতরে একাধিক শর্ত পূরণ করতে হয় (যেমন Name="Chris" AND Project="Banking"), তবে সাদা ডট নোটেশন কাজ করে না। সেক্ষেত্রে $elemMatch ব্যবহার করতে হয়।
উদাহরণ: ডেটা ইনসার্ট
> db.demo153.insertOne({"ClientDetails":[{"ClientName":"Chris","ClientProject":"Online Banking System"},{"ClientName":"David","ClientProject":"Online School Management"}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e351957fdf09dd6d08539df") }
> db.demo153.insertOne({"ClientDetails":[{"ClientName":"Carol","ClientProject":"Online Book System"},{"ClientName":"Mike","ClientProject":"Game Development"}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3519c9fdf09dd6d08539e0") }
সব ডকুমেন্ট দেখানো
> db.demo153.find();
আউটপুট:
{ "_id" : ObjectId("5e351957fdf09dd6d08539df"), "ClientDetails" : [ { "ClientName" : "Chris", "ClientProject" : "Online Banking System" }, { "ClientName" : "David", "ClientProject" : "Online School Management" } ] }
{ "_id" : ObjectId("5e3519c9fdf09dd6d08539e0"), "ClientDetails" : [ { "ClientName" : "Carol", "ClientProject" : "Online Book System" }, { "ClientName" : "Mike", "ClientProject" : "Game Development" } ] }
$elemMatch কোয়ারি (ClientProject "Online Banking System" 가진 উপাদান খুঁজে ডকুমেন্ট আনা)
> db.demo153.find({"ClientDetails": { "$elemMatch" : {"ClientProject": { "$in": ["Online Banking System"] } } } });
আউটপুট:
{ "_id" : ObjectId("5e351957fdf09dd6d08539df"), "ClientDetails" : [ { "ClientName" : "Chris", "ClientProject" : "Online Banking System" }, { "ClientName" : "David", "ClientProject" : "Online School Management" } ] }
ব্যাখ্যা
$elemMatch— অ্যারেতে একই উপাদান-এ সব শর্ত পূরণ হলে মিলiere।- সাদা
{"ClientDetails.ClientName":"Chris", "ClientDetails.ClientProject":"Banking"}দিলে আলাদা আলাদা উপাদান থেকে মিলিয়ে ডকুমেন্ট ফেরত দেবে (ভুল ফলাফল)। $inএখানে একই মান চেক করলে অপ্রয়োজন, সরাসরি"ClientProject":"Online Banking System"লিখলেই চলে।
প্রজেকশনে $elemMatch: find({}, {ClientDetails: {$elemMatch: {ClientProject:"Online Banking System"}}}) দিলে শুধু মিলা উপাদানটি আউটপুটে আসবে।