【问题标题】:What's the best way to segment a data by dates按日期分割数据的最佳方法是什么
【发布时间】:2020-09-16 18:15:24
【问题描述】:

正如标题所说

考虑这样的虚拟数据(我的猫鼬数据库中的一些用户)

[{ name : "ahmed" , registeredIn : 1590739626724 },
{ name : "ahmed" , registeredIn : 1590739626724 }
{ name : "ahmed" , registeredIn : 1590739626724 }
{ name : "ahmed" , registeredIn : 1590739626724 }
{ name : "ahmed" , registeredIn : 1590739626724 }]

在我的管理面板中,我想返回一个图表,显示每个月的注册用户数

只需要数字,5 月 2 ,6 月 3 等等..

什么是最快的解决方案?

我现在想到的唯一解决方案有点糟糕

每月分别获取

在时间戳 X 和 Y 之间获取用户

在时间戳 X 和 Y 之间获取用户

在时间戳 X 和 Y 之间获取用户

在时间戳 X 和 Y 之间获取用户

如果我想获取大约 20 个月的数据,我会调用 MongoDB 20 次吗?

还有更好的解决方案吗?

【问题讨论】:

  • 您是否尝试过在查询中按月份分组?...stackoverflow.com/questions/27366209/…
  • 您可以使用 mongoose.aggregate 来查找您可以使用 $match 并传递您的过滤器对象的数据,同时您可以使用 gt 和 lt 运算符传递时间戳。然后您可以根据月份对它们进行分组。 MongoDB 以其聚合而闻名,这是实现您所寻找的最佳和最快的方式。
  • 我搜索了你的答案,但仍然感到困惑,也许直接回答会更好

标签: node.js mongodb express mongoose


【解决方案1】:

尝试使用momentJS

npm install moment --save   # npm
yarn add moment             # Yarn

然后当您创建新用户时,在您的 mongoose 架构中添加一个新道具以作为创建日期

var UserSchema = new mongoose.Schema({
   // your fields
   creation_date:{type:String}
})
UserSchema.methods.preSaveMethod = function(){
 this.creation_date = moment().format('MMMM Do YYYY, h:mm:ss a');
}
UserSchema.pre("save", preSaveMethod);

虽然你可以在这里丢弃矩库,但它比正则表达式更容易使用,例如 如果你想提前一个月试试

moment().subtract(1, 'months').format('MMM YYYY');

希望我已经对你说得够清楚了

【讨论】:

  • 感谢易卜拉欣的帮助,但是看起来你的回答没有回答我的问题,如何计算每个月的计数(检查这个问题类似于我的需要):stackoverflow.com/questions/41791015/mongoose-group-and-count
  • 如果您保存了创建日期,您可以根据该月制作 User.find() moment().isBetween(Date1,Date2)
  • 抱歉,如果好好阅读我的问题,这将导致我的解决方案不好
猜你喜欢
  • 1970-01-01
  • 2020-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 2016-12-22
  • 1970-01-01
相关资源
最近更新 更多