Javascript 统计上周内的活跃用户数?
我有一个mongoDB数据库,其中包含由不同用户创建的对象。现在,为了跟踪用户保留和活动用户,每周我想了解有多少不同的用户创建了一个新对象 例如,假设对象是“注释”。我如何才能有效地统计上周有多少不同的用户创建了一个便笺 注:Javascript 统计上周内的活跃用户数?,javascript,node.js,mongodb,mongoose,aggregation-framework,Javascript,Node.js,Mongodb,Mongoose,Aggregation Framework,我有一个mongoDB数据库,其中包含由不同用户创建的对象。现在,为了跟踪用户保留和活动用户,每周我想了解有多少不同的用户创建了一个新对象 例如,假设对象是“注释”。我如何才能有效地统计上周有多少不同的用户创建了一个便笺 注: { "user_id" : "..." "note" : "..." "date" : "..." } 我用猫鼬和野猫 假设集合附加到名为Note的模型,并且中的数据“date”实际上是一个有效的date对象,那么您基本上可以查询给定日期和
{
"user_id" : "..."
"note" : "..."
"date" : "..."
}
我用猫鼬和野猫 假设集合附加到名为
Note
的模型,并且中的数据“date”
实际上是一个有效的date
对象,那么您基本上可以查询给定日期和聚合之间的数据:
// Work out days for start of tomorrow and one week before
const oneDay = 1000 * 60 * 60 * 24,
oneWeek = oneDay * 7;
const d = Date.now();
const lastDay = d - ( d % oneDay ) + oneDay;
const firstDay = lastDay - oneWeek;
// Run the aggregation
Note.aggregate([
// $match is a query to select the week
{ "$match": { "date": { "$gte": new Date(firstday), "$lt": new Date(lastDay) } },
// $group on the distinct users
{ "$group": { "_id": "$user_id" } },
// $group to count the total
{ "$group": { "_id": null, "count": { "$sum": 1 } } }
],function(err, results) {
// results in here
})
与任何其他MongoDB查询语句一样,这是一个“查询”。可以使用and运算符表示介于两者之间的值的“范围”。这实际上是一种简写方式,用于编写和条件,而不明确说明术语
下一个阶段是通过应用到分组键(即\u id
)来将“user\u id
”字段数据“聚合”为“不同”值。分组键的输出总是唯一的
最后一个阶段是另一个阶段,此时分组键为null
,而不是使用当前字段值。这意味着“对所有内容进行分组”,因此我们最终得到一行,该行对1
的值应用该操作以实现“计数”
这就是聚合“管道”的工作方式,因为每个“阶段”都流入下一个“阶段”。因此,“查询”->“聚合不同”->“聚合总计”是模式,其中最重要的是要记住,每个阶段只能看到前一阶段输出的数据的视图
一旦你掌握了这些概念,这就很容易了。Wow!非常感谢您的详细回答!我肯定会进一步研究聚合:)