我一直在查看Mongo文档,但似乎无法弄清楚如何执行以下操作。
我的mongoDB中有许多用户文档。我还存储他们登录的时间。我的文件的基本结构如下:
{
"_id": "5649d78a3701a14f0da852d1",
"email": "email@domain.com",
"logins": [
{
"_id": "56585cd2d869365ba532cfdd",
"logintime": "2015-11-27T15:54:19.000Z",
"typelogin": "website"
},
{
"_id": "56585cfaa52ebe65a58d2feb",
"logintime": "2015-11-27T15:54:19.000Z",
"typelogin": "website"
]}
}
正如您所看到的,每次用户登录时,我都会将其存储在数组"登录"。
我想要做的是计算特定日期之后所有登录的出现次数。例如,截至昨天的所有登录。
当我跑步时:
db.find({ "logins.logintime": { "$gte": new Date("2015-11-07T00:00:00.000Z")}},{ _id: 0, logins: {$elemMatch: { "typelogin": "website"}}});
我只收到一份文件。这是不正确的,因为有更多登录,但find只返回一个文档。我想我必须聚合并将结果推送到一个新数组中,但我不确定如何做到这一点。
答案 0 :(得分:1)
您可以使用聚合,如下所示:
第3步:分组和计数
db.dbname.aggregate([
{$unwind: "$logins"},
{$match: {
"logins.logintime": {$gte: "2015-11-27T15:54:19.000Z"},
"logins.typelogin": "website"
}},
{$group: {
_id: "$email",
logins: {$sum: 1}
}}
])
这将使用上面的示例数据返回:
{ "_id" : "email@domain.com", "logins" : 2 }