কী নেমে ডট (.) থাকা ডকুমেন্ট খুঁজে বের করা
MongoDB-এ ফিল্ড নেমে ডট (.) থাকলে সাধারণ কুয়েরি কাজ করে না। এমন ডকুমেন্ট খুঁজে বের করার জন্য অগ্রেশন পাইপলাইনে $objectToArray, $filter এবং $indexOfBytes ব্যবহার করতে হয়।
উদাহরণ: ডটসহ কী সহ ডকুমেন্ট তৈরি
> db.demo364.insertOne({ "details" : { "details1.otherdetails.Name" : { "FirstName":"Chris" } } });
{ "acknowledged" : true, "insertedId" : ObjectId("5e57d485d0ada61456dc936d") }
> db.demo364.insertOne({ "details" : { "details1.otherdetails.Name" : { "FirstName":"David" } } });
{ "acknowledged" : true, "insertedId" : ObjectId("5e57d486d0ada61456dc936e") }
সমস্ত ডকুমেন্ট
> db.demo364.find();
{ "_id" : ObjectId("5e57d485d0ada61456dc936d"), "details" : { "details1.otherdetails.Name" : { "FirstName" : "Chris" } } }
{ "_id" : ObjectId("5e57d486d0ada61456dc936e"), "details" : { "details1.otherdetails.Name" : { "FirstName" : "David" } } }
অগ্রেশন কুয়েরি: ডটসহ কী খুঁজে বের করা
> db.demo364.aggregate([
{ $addFields: {
result: {
$filter: {
input: { $objectToArray: "$details" },
cond: {
$ne: [ { $indexOfBytes: [ "$$this.k", "." ] }, -1 ]
}
}
}
}},
{ $match: { $expr: { $ne: [ { $size: "$result" }, 0 ] } } },
{ $project: { result: 0 } }
])
ফলাফল
{ "_id" : ObjectId("5e57d485d0ada61456dc936d"), "details" : { "details1.otherdetails.Name" : { "FirstName" : "Chris" } } }
{ "_id" : ObjectId("5e57d486d0ada61456dc936e"), "details" : { "details1.otherdetails.Name" : { "FirstName" : "David" } } }
পাইপলাইন ব্যাখ্যা
$objectToArray: অবজেক্টকে কী-ভ্যালু পেয়ারের অ্যারেতে রূপান্তর করে ([{k: "key", v: "value"}])।$filter: অ্যারেতে শুধু ডট (.) থাকা কীগুলো ফিল্টার করে।$indexOfBytes: স্ট্রিং-এ ডট (.) আছে কিনা চেক করে (না থাকলে -1 রিটার্ন করে)।$match: ফিল্টার করা রেজাল্ট খালি নয় এমন ডকুমেন্ট সিলেক্ট করে।$project: অস্থায়ীresultফিল্ড বাদ দেয়।
সতর্কতা: ফিল্ড নেমে ডট (.) ব্যবহার এড়ানো ভালো, কারণ এটি কুয়েরি এবং আপডেটে জটিলতা সৃষ্টি করে।