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

MongoDB-এ অজানা (unknown) কী দিয়ে কুয়েরি করা

MongoDB-এ ডাইনামিক বা অজানা কী (Key) দিয়ে কুয়েরি

যদি ডকুমেন্টের ফিল্ডের কী (Key) ناشনাক্ত বা ডাইনামিক হয় (যেমন details.Name, details.Age ইত্যাদি), তবে সেগুলো খুঁজে বের করতে অগ্রেশন পাইপলাইনে $objectToArray এবং $addFields ব্যবহার করে অবজেক্টকে কী-ভ্যালু অ্যারেতে রূপান্তর করতে হয়।

উদাহরণ: ডাইনামিক কী সহ ডকুমেন্ট তৈরি

> db.demo375.insertOne({ "details":{"Name":"John", "Age":23 } });
{ "acknowledged" : true, "insertedId" : ObjectId("5e5a0ae42ae06a1609a00b06") }
> db.demo375.insertOne({ "details":{"Name":"David", "Age":21 } });
{ "acknowledged" : true, "insertedId" : ObjectId("5e5a0ae42ae06a1609a00b07") }
> db.demo375.insertOne({ "details":{"Name":"David", "Age":22 } });
{ "acknowledged" : true, "insertedId" : ObjectId("5e5a0ae42ae06a1609a00b08") }

সমস্ত ডকুমেন্ট

> db.demo375.find();
{ "_id" : ObjectId("5e5a0ae42ae06a1609a00b06"), "details" : { "Name" : "John", "Age" : 23 } }
{ "_id" : ObjectId("5e5a0ae42ae06a1609a00b07"), "details" : { "Name" : "David", "Age" : 21 } }
{ "_id" : ObjectId("5e5a0ae42ae06a1609a00b08"), "details" : { "Name" : "David", "Age" : 22 } }

অগ্রেশন কুয়েরি: অজানা কী "Name" দিয়ে "David" খুঁজে বের করা

> db.demo375.aggregate([
    { "$addFields": { "UnknownKeys": { "$objectToArray": "$$ROOT" } } },
    { "$match": { "UnknownKeys.v.Name": "David" } },
    { "$project": { "UnknownKeys": 0 } }
])

ফলাফল

{ "_id" : ObjectId("5e5a0ae42ae06a1609a00b07"), "details" : { "Name" : "David", "Age" : 21 } }
{ "_id" : ObjectId("5e5a0ae42ae06a1609a00b08"), "details" : { "Name" : "David", "Age" : 22 } }

পাইপলাইন ব্যাখ্যা

  1. $objectToArray: "$$ROOT": পুরো ডকুমেন্টকে কী-ভ্যালু অ্যারেতে রূপান্তর: [{k:"_id",v:...}, {k:"details",v:{Name:"David",Age:21}}]।
  2. $addFields: নতুন ফিল্ড UnknownKeys যোগ করা।
  3. $match: UnknownKeys.v.Name মানে অ্যারেতে যেকোনো এলিমেন্টের v.Name = "David" চেক করা।
  4. $project: অস্থায়ী UnknownKeys ফিল্ড বাদ দেওয়া।
  5. সীমাবদ্ধতা ও বিকল্প

    • পারফরম্যান্স: পুরো ডকুমেন্ট স্ক্যান করে, ইনডেক্স ব্যবহার করে না।
    • সমান্তরাল: স্কিমা ডিজাইন ফিক্সড রাখুন (Dynamic Schema এড়ান)।
    • MongoDB 4.2+ এ $replaceRoot বা $set ব্যবহার করা যায়।
  1. MongoDB-এ নেস্টেড ডকুমেন্ট থেকে শুধু কী (keys) বের করা

  2. সি++ প্রোগ্রাম: দেওয়া শর্ত অনুযায়ী X এবং Y-এর চূড়ান্ত মান নির্ণয়

  3. MongoDB কালেকশন থেকে সব ফিল্ড নাম দক্ষতার সাথে রিট্রিভ করুন

  4. MongoDB কালেকশনে সকল কি নাম সহজে রিট্রিভ করুন