Active User Count By Date in Mongodb

Active user ကို သိခ်င္သည့္ အခါမွာ user app ကို login ဝင္တိုင္း log မွတ္ပါတယ္။

id user_id created_at
1 1 2019-04-12
2 1 2019-04-13
3 2 2019-04-12
4 2 2019-04-13
5 3 2019-04-13
6 4 2019-04-13
7 4 2019-04-13
8 1 2019-04-13
9 3 2019-04-13

MySQL အရ ေအာက္ပါ အတိုင္း ေရးပါတယ္။

SELECT COUNT(DISTINCT user_id),created_date From login_user where created_date >= "2019-04-12" and created_date <= "2019-04-13" Group By created_date

user_id ကို DISTINCT ခံၿပီး COUNT ျပန္တြက္ပါတယ္။ group ကို created_date နဲ႔ ဖြဲ႕ပါတယ္။ DISTINCT ထည့္ရျခင္းကေတာ့ တစ္ေန႔မွာ user တစ္ေယာက္ဟာ တစ္ႀကိမ္ထက္ မနည္း ဝင္ႏိုင္တယ္။ ဒါေၾကာင့္ DISTINCT ထည့္ၿပီးမွ GROUP BY အတြက္ COUNT လုပ္တာပါ။

Mongodb မွာေတာ့ aggregate နဲ႔ တြဲေရးပါတယ္။

db.getCollection("logger").aggregate([
{
    "$match": {
            "created_at": {$lte: new Date("2019-04-10") , $gte: new Date("2019-04-09") }
    }
},
{
    $group : {
        _id : {"user_no":"$user_no","created_at":"$created_at"},
        "created_at" : {"$first" : "$created_at"}
    }
},
{
    $group : {
        _id : "$created_at",
                count: {$sum: 1}
    }
}  
])

ပထမဆုံး where case ကို စစ္တယ္။ ၿပီးေတာ့ group by နဲ႔ user_no , created_at ကို group ဖြဲ႕လိုက္တယ္။ user_no နဲ႔ created_at ကို group ဖြဲ႕ မွသာ အဲဒီေန႔မွ ဝင္မယ့္ user အေရအတြက္ အတိအက် ရႏိုင္ပါလိမ့္မယ္။ created_at value ကို ေတာ့ ယူထားဖို႔ လိုပါတယ္။ ဒါမွသာ ထပ္ၿပီး created_at နဲ႔ group ျပန္ဖြဲ႕လို႔ရပါလိမ့္မယ္။


 
7 Kudos
Don't
move!

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.