我正在尝试在滚动窗口(例如, 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
请注意,由于在2019-01-24上有一个后续事件(前一场比赛有30天),因此应该忽略2019-01-21以来的“ Dib Shabo”记录,但是来自应该算2018年3月1日,因为它不在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天滚动窗口,也不是重复名称!
我不知道如何将这两个额外条件添加到聚合中。 有人可以帮忙吗?