MongoDB অগ্রিগেশনে $group এবং $push অপারেটর ব্যবহার করে গ্রুপ বাই করা ফিল্ড অনুযায়ী অন্য ফিল্ডের মানগুলোর একটি অ্যারে (তালিকা) তৈরি করা যায়।
নমুনা ডেটা তৈরি করা
groupByDemo কালেকশনে ৫টি ডকুমেন্ট ইনসার্ট করি।
> db.groupByDemo.insertOne({"UserName":"John","Subject":"MongoDB"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd69f0457806ebf1256f136") }
> db.groupByDemo.insertOne({"UserName":"Larry","Subject":"MySQL"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd69f0657806ebf1256f137") }
> db.groupByDemo.insertOne({"UserName":"John","Subject":"Java"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd69f0d57806ebf1256f138") }
> db.groupByDemo.insertOne({"UserName":"John","Subject":"C"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd69f1357806ebf1256f139") }
> db.groupByDemo.insertOne({"UserName":"Larry","Subject":"SQL Server"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd69f1c57806ebf1256f13a") }
সকল ডকুমেন্ট দেখানো
> db.groupByDemo.find().pretty();
আউটপুট:
{ "_id" : ObjectId("5cd69f0457806ebf1256f136"), "UserName" : "John", "Subject" : "MongoDB" }
{ "_id" : ObjectId("5cd69f0657806ebf1256f137"), "UserName" : "Larry", "Subject" : "MySQL" }
{ "_id" : ObjectId("5cd69f0d57806ebf1256f138"), "UserName" : "John", "Subject" : "Java" }
{ "_id" : ObjectId("5cd69f1357806ebf1256f139"), "UserName" : "John", "Subject" : "C" }
{ "_id" : ObjectId("5cd69f1c57806ebf1256f13a"), "UserName" : "Larry", "Subject" : "SQL Server" }
$group এবং $push দিয়ে তালিকা বানানো
UserName অনুযায়ী গ্রুপ করে Subject গুলো অ্যারেতে পুশ করি:
> db.groupByDemo.aggregate({$group: { '_id': '$UserName', 'Subject': { $push: '$Subject' } }});
আউটপুট:
{ "_id" : "Larry", "Subject" : [ "MySQL", "SQL Server" ] }
{ "_id" : "John", "Subject" : [ "MongoDB", "Java", "C" ] }
নোট: $push অর্ডার রক্ষা করে। অনIQUE মান চাইলে $addToSet ব্যবহার করুন।