MongoDB猫鼬组与计数

时间:2019-10-24 05:50:39

标签: mongodb mongoose

我是MongoDB的新手,必须使用基于MongoDB的分析API。

我有一个叫做Session的模型

user: { id: Number, name: String, email: String },
ipAddress: String,
device: String,
createdAt: Date

我的要求是

获取过去7天的会话总数,并按日期将其分组。

希望我的问题对您很清楚。 有帮助吗?

2 个答案:

答案 0 :(得分:2)

您可以使用 $group 将相似的记录分组,然后在$ group阶段使用 $sum 累加器对记录进行计数。 / p>

let date = new Date();
date.setDate(date.getDate() - 7);

db.collection("sessions").aggregate({$match:{createdAt: {$gte: date }}},
     {$group:{
         _id: "$_id",
         count: {$sum: 1},
         createdAt: {$first: "$createdAt"},
     }},
     {$group: {
         _id: "$createdAt",
         countAccToDate: {$sum: "$count"},
         totalCount: {$first: "$count"}
     }})

说明:

首先,我要过滤符合 $ match 条标准的记录,

然后,我在第一个$ group阶段中按_id对它们进行分组,这样我们就可以得到总计的会话数(即使一个用户可以有多个会话,或者对于一个会话来说,可以有多个会话相同的日期),这样我们就可以获得会话总数。

使用 $first ,您可以投影$ group阶段中匹配的第一个值。

然后在第二个$ group阶段中,我根据createdAt将它们分组,并计算该时间的会话总数。

希望这会有所帮助。

答案 1 :(得分:0)

var d = new Date();
d.setDate(d.getDate()-7);
db.getCollection('sessions').aggregate([
{$match: {'createdAt': {$gt: d}}}
])