Вы можете использовать агрегацию ниже для уникальных активных пользователей по дням и месяцам. Я принял в качестве поля метки времени ct.
db.collection.aggregate(
[
{"$match":{"ct":{"$gte":dateFrom,"$lt":dateTo}}},
{"$facet":{
"dau":[
{"$group":{
"_id":{
"user":"$user",
"ymd":{"$dateToString":{"format":"%Y-%m-%d","date":"$ct"}}
}
}},
{"$group":{"_id":"$_id.ymd","dau":{"$sum":1}}}
],
"mau":[
{"$group":{
"_id":{
"user":"$user",
"ym":{"$dateToString":{"format":"%Y-%m","date":"$ct"}}
}
}},
{"$group":{"_id":"$_id.ym","mau":{"$sum":1}}}
]
}}
])
DAU
db.collection.aggregate(
[
{"$match":{"ct":{"$gte":dateFrom,"$lt":dateTo}}},
{"$group":{
"_id":{
"user":"$user",
"ymd":{"$dateToString":{"format":"%Y-%m-%d","date":"$ct"}}
}
}},
{"$group":{"_id":"$_id.ymd","dau":{"$sum":1}}}
])
MAU
db.collection.aggregate(
[
{"$match":{"ct":{"$gte":dateFrom,"$lt":dateTo}}},
{"$group":{
"_id":{
"user":"$user",
"ym":{"$dateToString":{"format":"%Y-%m","date":"$ct"}}
}
}},
{"$group":{"_id":"$_id.ym","mau":{"$sum":1}}}
])