MongoDB-এ সাবডকুমেন্ট (নেস্টেড অবজেক্ট) সর্ট, সিলেক্ট এবং কোয়েরি করতে অ্যাগ্রিগেশন পাইপলাইনে $unwind (যদি অ্যারে হয়), $project, এবং $sort স্টেজ ব্যবহার করা হয়।
নমুনা কালেকশন তৈরি
> db.demo236.insertOne({ "details": { "Name": "Chris", "Age": 21 } });
{ "acknowledged": true, "insertedId": ObjectId("5e419015f4cebbeaebec514c") }
> db.demo236.insertOne({ "details": { "Name": "David", "Age": 23 } });
{ "acknowledged": true, "insertedId": ObjectId("5e41901cf4cebbeaebec514d") }
> db.demo236.insertOne({ "details": { "Name": "Bob", "Age": 24 } });
{ "acknowledged": true, "insertedId": ObjectId("5e419023f4cebbeaebec514e") }
ডকুমেন্টগুলো দেখানো
> db.demo236.find();
আউটপুট:
{ "_id": ObjectId("5e419015f4cebbeaebec514c"), "details": { "Name": "Chris", "Age": 21 } }
{ "_id": ObjectId("5e41901cf4cebbeaebec514d"), "details": { "Name": "David", "Age": 23 } }
{ "_id": ObjectId("5e419023f4cebbeaebec514e"), "details": { "Name": "Bob", "Age": 24 } }
নোট: এখানে details একটি অবজেক্ট (সাবডকুমেন্ট), অ্যারে নয়। কিন্তু উদাহরণে $unwind ব্যবহার করা হয়েছে, যা অ্যারের জন্য। সাবডকুমেন্টের জন্য $unwind লাগে না।
সাবডকুমেন্ট সর্ট, সিলেক্ট, কোয়েরি (সঠিক পদ্ধতি)
> db.demo236.aggregate([
{ $project: {
Name: '$details.Name',
Age: '$details.Age'
}
},
{ $sort: { Name: -1 } }
]);
ফলাফল
{ "_id": ObjectId("5e41901cf4cebbeaebec514d"), "Name": "David", "Age": 23 }
{ "_id": ObjectId("5e419015f4cebbeaebec514c"), "Name": "Chris", "Age": 21 }
{ "_id": ObjectId("5e419023f4cebbeaebec514e"), "Name": "Bob", "Age": 24 }
ব্যাখ্যা:
$project-details.Nameএবংdetails.Ageএক্সট্রাক্ট করে রুট লেভেলে আনে।$sort: { Name: -1 }- নামের ডিসেন্ডিং অর্ডারে সর্ট (David, Chris, Bob)।$unwindপ্রয়োজন নেই কারণdetailsঅ্যারে নয়।
সাবডকুমেন্টে কোয়েরি (find-এ)
// ডট নোটেশন ব্যবহার
db.demo236.find({ "details.Age": { $gt: 22 } });
// ফলাফল: David (23), Bob (24)
সাবডকুমেন্ট আপডেট
db.demo236.updateOne(
{ "details.Name": "Chris" },
{ $set: { "details.Age": 22 } }
);
অ্যারে অফ সাবডকুমেন্টের ক্ষেত্রে
যদি details অ্যারে হয় (details: [{Name: "Chris", Age: 21}, ...]), তবে $unwind ব্যবহার করুন।