Монгодб подсчитывает отчетливую агрегацию в скользящем окне - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь получить количество событий в день для каждого уникального человека в скользящем окне, например, за 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 дополнительных условия к агрегации.Может кто-нибудь помочь, пожалуйста?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...