Я пытаюсь получить количество событий в день для каждого уникального человека в скользящем окне, например, за 30 дней.
Коллекция выглядит следующим образом:
{
"_id" : ObjectId("1xxx"),
"first_name" : "Dib",
"last_name" : "Shabo",
"_modified" : "2019-01-24 2:00:00"
},
{
"_id" : ObjectId("1yyy"),
"first_name" : "Jon",
"last_name" : "Holmes",
"_modified" : "2019-01-24 15:23:11"
},
{
"_id" : ObjectId("1zzz"),
"first_name" : "James",
"last_name" : "Bently",
"_modified" : "2019-01-24 17:37:11"
},
{
"_id" : ObjectId("1aaa"),
"first_name" : "Fred",
"last_name" : "Gimbal",
"_modified" : "2019-01-22 15:37:11"
},
{
"_id" : ObjectId("1bbb"),
"first_name" : "Dib",
"last_name" : "Shabo",
"_modified" : "2019-01-21 13:32:11"
},
{
"_id" : ObjectId("1ccc"),
"first_name" : "Sheesho",
"last_name" : "Shabo",
"_modified" : "2019-01-21 11:30:11"
},
{
"_id" : ObjectId("1ddd"),
"first_name" : "Dib",
"last_name" : "Shabo",
"_modified" : "2018-03-01 13:32:11"
}
И я надеюсь получить такой результат, как:
2019-01-24: 3
2019-01-22: 1
2019-01-21: 1
2018-03-01: 1
Обратите внимание, что запись "Dib Shabo" от 2019-01-21 должна быть проигнорирована, потому что есть следующее событие на 2019-01-24,то есть с 30 днями предыдущего события, но запись «Диб Шабо» за 2018-03-01 должна быть засчитана, потому что она выходит за пределы 30-дневного скользящего окна.
Мой существующий вопрос:
var myCursor = db.events.aggregate({
$project : { day : {$substr: ["$_modified", 0, 10] }}},{
$group : { _id: "$day", number:{$sum:1}}},{
$sort : { _id : -1 }}
); myCursor.forEach(printjson);
и возвращает:
2019-01-24: 3
2019-01-22: 1
2019-01-21: 2
2018-03-01: 1
Это не относится ни к 30-дневному скользящему окну, ни к повторным именам!
Я заблудился, как я могу добавить эти 2 дополнительных условия к агрегации.Может кто-нибудь помочь, пожалуйста?