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 ပြန်ဖွဲ့လို့ရပါလိမ့်မယ်။

Leave a Reply

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