MongoDB-এ এমবেডেড (nested) ডকুমেন্ট থেকে নির্দিষ্ট ফিল্ড প্রজেক্ট করে ফেচ করতে অ্যাগ্রিগেশন পাইপলাইনে $project স্টেজ ব্যবহার করা হয়।
কলেকশন এবং ডকুমেন্ট তৈরি
> db.demo220.insertOne({
... "id": 101,
... "FullName" : "John Doe",
... "EmailId" : "john12@gmail.com",
... "ShippingDate" : new ISODate(),
... "details" : { "_id" : 1001, "isMarried" : true }
... });
{ "acknowledged" : true, "insertedId" : ObjectId("5e3eaf5b03d395bdc213471d") }
> db.demo220.insertOne({
... "id": 102,
... "FullName" : "John Smith",
... "EmailId" : "johnsmith@gmail.com",
... "ShippingDate" : new ISODate(),
... "details" : { "_id" : 1002, "isMarried" : false }
... });
{ "acknowledged" : true, "insertedId" : ObjectId("5e3eaf5c03d395bdc213471e") }
সব ডকুমেন্ট দেখানো
> db.demo220.find();
আউটপুট:
{ "_id" : ObjectId("5e3eaf5b03d395bdc213471d"), "id" : 101, "FullName" : "John Doe", "EmailId" : "john12@gmail.com", "ShippingDate" : ISODate("2020-02-08T12:53:47.876Z"), "details" : { "_id" : 1001, "isMarried" : true } }
{ "_id" : ObjectId("5e3eaf5c03d395bdc213471e"), "id" : 102, "FullName" : "John Smith", "EmailId" : "johnsmith@gmail.com", "ShippingDate" : ISODate("2020-02-08T12:53:48.991Z"), "details" : { "_id" : 1002, "isMarried" : false } }
এমবেডেড ডকুমেন্ট প্রজেক্ট করার কোয়ারী
$project স্টেজে ডট নোটেশন $details.isMarried ব্যবহার করে শুধু isMarried ফিল্ড প্রজেক্ট করা হয়েছে:
> db.demo220.aggregate({ $project: {
... "isMarried" : "$details.isMarried",
... "detailsId" : "$details._id"
... }});
ফলাফল
{ "_id" : ObjectId("5e3eaf5b03d395bdc213471d"), "isMarried" : true }
{ "_id" : ObjectId("5e3eaf5c03d395bdc213471e"), "isMarried" : false }
ব্যাখ্যা:
"isMarried" : "$details.isMarried"- নেস্টেড details অবজেক্টের isMarried ফিল্ডকে টপ-লেভেল isMarried ফিল্ড হিসেবে প্রজেক্ট"detailsId" : "$details._id"- details অবজেক্টের _id ফিল্ড প্রজেক্ট- মূল ডকুমেন্টের _id (ObjectId) অটোমেটিক্যালি থাকে (যদি 0: না দিয়ে 억প্রেশন না করা হয়)
বিকল্প: find() প্রজেকশন দিয়ে (সহজ পদ্ধতি):
db.demo220.find({}, { "details.isMarried": 1, "_id": 0 })
// ফলাফল: { "details" : { "isMarried" : true } }, { "details" : { "isMarried" : false } }
অ্যারেতে এমবেডেড ডকুমেন্ট হলে:
db.collection.aggregate([
{ $unwind: "$details" },
{ $project: { isMarried: "$details.isMarried" } }
])
ব্যবহার ক্ষেত্র: ডেটা ট্রান্সফরমেশন, API রেসপন্স শেপিং, সেনসিটিভ ফিল্ড হাইডিং, ডাউনস্ট্রিম প্রসেসিং-এর জন্য লাইটওয়েট আউটপুট।