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.

Discover more from Saturngod

Subscribe now to keep reading and get access to the full archive.

Continue reading