我是MongoDB的新手,必须使用基于MongoDB的分析API。
我有一个叫做Session的模型
user: { id: Number, name: String, email: String },
ipAddress: String,
device: String,
createdAt: Date
我的要求是
获取过去7天的会话总数,并按日期将其分组。
希望我的问题对您很清楚。 有帮助吗?
答案 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}}}
])