$group এবং $project ব্যবহার করে অন্য ফিল্ড অনুযায়ী গ্রুপিং
MongoDB Aggregation-এ একটি ফিল্ড দিয়ে গ্রুপ করে অন্য ফিল্ডের মানগুলো সংগ্রহ করতে $group এবং $project (with $reduce) ব্যবহার করা হয়।
নমুনা সংগ্রহ তৈরি
> db.demo374.insertOne(
{
"Name" : "Chris",
"HobbyDetails" : [ "Reading Book", "Playing Football" ],
"CountryName" : "US"
}
);
{ "acknowledged" : true, "insertedId" : ObjectId("5e5a04402ae06a1609a00b04") }
> db.demo374.insertOne(
{
"Name" : "Chris",
"HobbyDetails" : [ "Browsing Internet", "Playing Football" ],
"CountryName" : "US"
}
);
{ "acknowledged" : true, "insertedId" : ObjectId("5e5a04402ae06a1609a00b05") }
সব ডকুমেন্ট দেখানো
> db.demo374.find();
আউটপুট:
Name দিয়ে গ্রুপ করে HobbyDetails মার্জ করা
> db.demo374.aggregate([ {$match : { "CountryName" : "US"}}, {$group : {"_id" : "$Name", "HobbyDetails" : {$addToSet : "$HobbyDetails"}}}, {$project : {"_id" : 0, "Name" : "$_id", "HobbyDetails" : {$reduce : {input : "$HobbyDetails", initialValue : [], in: { $concatArrays : ["$$value", "$$this"] }}}}} ]).pretty()ফলাফল:
ব্যাখ্যা: CountryName "US" ফিল্টার করে, Name দিয়ে গ্রুপ করা হয়েছে। $addToSet অ্যারে অফ অ্যারে তৈরি করে, তারপর $reduce এবং $concatArrays দিয়ে সেটি ফ্ল্যাটেন করা হয়েছে। ডুপ্লিকেট "Playing Football" দুবার এসেছে।