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 } }
পাইপলাইন ব্যাখ্যা
$objectToArray: "$$ROOT": পুরো ডকুমেন্টকে কী-ভ্যালু অ্যারেতে রূপান্তর:[{k:"_id",v:...}, {k:"details",v:{Name:"David",Age:21}}]।$addFields: নতুন ফিল্ডUnknownKeysযোগ করা।$match:UnknownKeys.v.Nameমানে অ্যারেতে যেকোনো এলিমেন্টেরv.Name= "David" চেক করা।$project: অস্থায়ীUnknownKeysফিল্ড বাদ দেওয়া।- পারফরম্যান্স: পুরো ডকুমেন্ট স্ক্যান করে, ইনডেক্স ব্যবহার করে না।
- সমান্তরাল: স্কিমা ডিজাইন ফিক্সড রাখুন (Dynamic Schema এড়ান)।
- MongoDB 4.2+ এ
$replaceRootবা$setব্যবহার করা যায়।