Aggregation Pipeline ব্যবহার করে ডেট বেসড গ্রুপিং
MongoDB-এ তারিখ অনুযায়ী ডেটা গ্রুপ করার জন্য Aggregation Framework-এর $group স্টেজ ব্যবহার করা হয়। নিচে ধাপে ধাপে উদাহরণ দেওয়া হলো।
নমুনা ডেটা তৈরি
> db.groupByDateDemo.insertOne({"UserLoginDateTime": new ISODate()});
{ "acknowledged" : true, "insertedId" : ObjectId("5c6ee4df6fd07954a4890695") }
> db.groupByDateDemo.insertOne({"UserLoginDateTime": new ISODate("2019-01-31 15:20:09.234Z")});
{ "acknowledged" : true, "insertedId" : ObjectId("5c6ee51c6fd07954a4890696") }
> db.groupByDateDemo.insertOne({"UserLoginDateTime": new ISODate("2017-04-21 16:12:13.240Z")});
{ "acknowledged" : true, "insertedId" : ObjectId("5c6ee5336fd07954a4890697") }
> db.groupByDateDemo.insertOne({"UserLoginDateTime": new ISODate("2016-05-25 19:11:21.130Z")});
{ "acknowledged" : true, "insertedId" : ObjectId("5c6ee54b6fd07954a4890698") }
> db.groupByDateDemo.insertOne({"UserLoginDateTime": new ISODate("2016-05-25 19:11:21.130Z")});
{ "acknowledged" : true, "insertedId" : ObjectId("5c6ee8de6fd07954a4890699") }
> db.groupByDateDemo.insertOne({"UserLoginDateTime": new ISODate()});
{ "acknowledged" : true, "insertedId" : ObjectId("5c6ee8e76fd07954a489069a") }
ডেটা যাচাই:
> db.groupByDateDemo.find().pretty();
গ্রুপ বাই কোয়েরি
ইয়ার এবং ডে অফ ইয়ার কম্বাইন করে ইউনিক ডেট তৈরি করা হয়েছে:
> db.groupByDateDemo.aggregate([
{
$group: {
_id: {
$add: [
{ $dayOfYear: "$UserLoginDateTime" },
{ $multiply: [400, { $year: "$UserLoginDateTime" }] }
]
},
NumberOfTimes: { $sum: 1 },
f: { $min: "$UserLoginDateTime" }
}
},
{ $sort: { _id: 1 } },
{ $limit: 10 },
{ $project: { date: "$f", NumberOfTimes: 1, _id: 0 } }
]);
ফলাফল:
{
"NumberOfTimes" : 2,
"date" : ISODate("2016-05-25T19:11:21.130Z")
}
{
"NumberOfTimes" : 1,
"date" : ISODate("2017-04-21T16:12:13.240Z")
}
{
"NumberOfTimes" : 1,
"date" : ISODate("2019-01-31T15:20:09.234Z")
}
{
"NumberOfTimes" : 2,
"date" : ISODate("2019-02-21T17:50:23.076Z")
}
ব্যাখ্যা: একই তারিখের একাধিক লগইন এন্ট্রি থাকলে সেগুলো একসাথে গ্রুপ হয়েছে এবং প্রতিটি তারিখের জন্য মোট কাউন্ট দেখানো হয়েছে।