MongoDB-এ একটি ফিল্ডের মানগুলোর ফ্রিকোয়েন্সি (কতবার আয়ত্ত হয়েছে) বের করতে অ্যাগ্রিগেশন পাইপলাইনে $group স্টেজের সাথে $sum: 1 ব্যবহার করা হয়। এটি SQL-এর GROUP BY ... COUNT(*)-এর সমতুল্য।
নমুনা কালেকশন তৈরি
> db.demo232.insertOne({ _id: 101, Name: "Chris" });
{ "acknowledged": true, "insertedId": 101 }
> db.demo232.insertOne({ _id: 102, Name: "Bob" });
{ "acknowledged": true, "insertedId": 102 }
> db.demo232.insertOne({ _id: 103, Name: "Bob" });
{ "acknowledged": true, "insertedId": 103 }
> db.demo232.insertOne({ _id: 104, Name: "David" });
{ "acknowledged": true, "insertedId": 104 }
> db.demo232.insertOne({ _id: 105, Name: "Chris" });
{ "acknowledged": true, "insertedId": 105 }
সমস্ত ডকুমেন্ট দেখানো
> db.demo232.find();
আউটপুট:
{ "_id": 101, "Name": "Chris" }
{ "_id": 102, "Name": "Bob" }
{ "_id": 103, "Name": "Bob" }
{ "_id": 104, "Name": "David" }
{ "_id": 105, "Name": "Chris" }
নামের ফ্রিকোয়েন্সি বের করা
> db.demo232.aggregate([
{ $group: { _id: "$Name", Frequency: { $sum: 1 } } }
]);
ফলাফল
{ "_id": "David", "Frequency": 1 }
{ "_id": "Bob", "Frequency": 2 }
{ "_id": "Chris", "Frequency": 2 }
ব্যাখ্যা:
$group: { _id: "$Name" }-Nameফিল্ড দিয়ে গ্রুপিং করে। একই নাম वाले এক গ্রুপে পড়ে।Frequency: { $sum: 1 }- প্রতিটি গ্রুপে ডকুমেন্ট সংখ্যা গণনা করে (প্রতিটি ডকুমেন্টের জন্য ১ যোগ করে)।- Chris: ২ বার, Bob: ২ বার, David: ১ বার।
ফ্রিকোয়েন্সি অনুযায়ী সর্ট করা
db.demo232.aggregate([
{ $group: { _id: "$Name", Frequency: { $sum: 1 } } },
{ $sort: { Frequency: -1 } }
]);
ফলাফল: Bob (2), Chris (2), David (1) - ডিসেন্ডিং অর্ডার।
আউটপুট ফরম্যাট পরিবর্তন
db.demo232.aggregate([
{ $group: { _id: "$Name", Frequency: { $sum: 1 } } },
{ $project: { _id: 0, Name: "$_id", Frequency: 1 } }
]);
ফলাফল: { "Name": "David", "Frequency": 1 }, { "Name": "Bob", "Frequency": 2 }, { "Name": "Chris", "Frequency": 2 }