MongoDB-এ একটি ডকুমেন্টের ভেতরের অ্যারে (যেমন ProductInformation) এর আইটেমগুলো গ্রুপ করে নির্দিষ্ট ফিল্ড (যেমন ProductPrice) অনুযায়ী কাউন্ট করতে $unwind, $group, এবং $sort স্টেজ ব্যবহার করা হয়।
উদাহরণ: কালেকশন ও ডেটা তৈরি
> db.demo566.insertOne({
"ProductInformation": [
{ "ProductName": "Product-1", "ProductPrice": 100 },
{ "ProductName": "Product-2", "ProductPrice": 1100 },
{ "ProductName": "Product-3", "ProductPrice": 100 },
{ "ProductName": "Product-4", "ProductPrice": 1100 },
{ "ProductName": "Product-5", "ProductPrice": 100 }
]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e908e2339cfeaaf0b97b57a") }
সব ডকুমেন্ট দেখানো
> db.demo566.find();
আউটপুট:
{ "_id" : ObjectId("5e908e2339cfeaaf0b97b57a"), "ProductInformation" : [
{ "ProductName" : "Product-1", "ProductPrice" : 100 },
{ "ProductName" : "Product-2", "ProductPrice" : 1100 },
{ "ProductName" : "Product-3", "ProductPrice" : 100 },
{ "ProductName" : "Product-4", "ProductPrice" : 1100 },
{ "ProductName" : "Product-5", "ProductPrice" : 100 }
] }
Aggregation কোয়েরি: প্রাইস অনুযায়ী গ্রুপ করে কাউন্ট
> db.demo566.aggregate([
{ $unwind: "$ProductInformation" },
{ $group: {
_id: "$ProductInformation.ProductPrice",
Value: { $sum: 1 }
}},
{ $sort: { "_id": 1 } }
])
কোয়েরির ব্যাখ্যা
$unwind: "$ProductInformation"— অ্যারেতে থাকা প্রতিটি প্রোডাক্ট অবজেক্টকে আলাদা ডকুমেন্ট হিসেবে ফ্ল্যাটেন করে।$group—ProductPriceঅনুযায়ী গ্রুপ করে (_id: "$ProductInformation.ProductPrice") এবং$sum: 1দিয়ে প্রতিটি গ্রুপের কাউন্ট (Value) বের করে।$sort: { "_id": 1 }— প্রাইস অনুযায়ী অ্যাসেন্ডিং অর্ডারে সর্ট করে।
আউটপুট
{ "_id" : 100, "Value" : 3 }
{ "_id" : 1100, "Value" : 2 }
প্রাইস ১০০য় ৩টি প্রোডাক্ট, ১১০০য় ২টি প্রোডাক্ট।
মূল পয়েন্টসমূহ
$unwindঅ্যারে ডিকনস্ট্রাক্ট করার জন্য আবশ্যক।$groupএ_idহিসেবে গ্রুপিং ফিল্ড নির্দিষ্ট করুন।$sum: 1হলো কাউন্ট করার সাধারণ প্যাটার্ন।- বড় অ্যারে বা বড় ডেটাসেটে
$unwindপারফরম্যান্স কমাতে পারে; إندেক্স বা প্রি-অ্যাগ্রিগেশন বিবেচনা করুন।