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

MongoDB-এ $elemMatch দিয়ে নেস্টেড অ্যারে ফিল্ড কোয়ারি করা

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"}}}) দিলে শুধু মিলা উপাদানটি আউটপুটে আসবে।

  1. MongoDB কোয়ারী: আইডি যদি ডকুমেন্ট ফিল্ড অ্যারে মানের সমান হয় তবে বাদ দেওয়া

  2. MongoDB-তে সাবডকুমেন্টের অ্যারে কুয়েরি

  3. MongoDB-এ নেস্টেড অ্যারে সর্ট করা

  4. MongoDB-এ এমবেডেড ডকুমেন্টের অ্যারে ফিল্টার করা (৩ লেভেল)