【问题标题】:How can I group by dates in MongoDB如何在 MongoDB 中按日期分组
【发布时间】:2017-10-22 09:19:54
【问题描述】:

我正在寻找创建一个时间线 REST api,它将提取 MongoDB 数据条目并使用我在集合中拥有的 created_at 属性组织它们。

我希望通过几个不同的分组来分隔“时间线”条目。

第一组是“过去 24 小时”,第二组是“昨天”,第三组是“上周”,最后一组是“其他一切”。我将限制“其他所有内容”,这样它就不会从很久以前拉出一堆东西......

我在 Mongoose 中所做的是按我的 created_at 分组的 MongoDB $group,但我遇到了问题,因为我只是想做一个 created_at “like”,因为我不能使用确切的时间戳或分组不起作用。

有没有人有类似的经验?我想如何将其扩展为使用多个分组,我可以先按“今天”(过去 24 小时)分组,然后按周或“上周”分组其他所有内容?

我需要先做一个分组,然后在我的下一个分组中排除之前分组的结果。

感谢您的宝贵时间。

【问题讨论】:

标签: node.js mongodb express


【解决方案1】:

为什么不把它分成三个查询呢? 今天的第一个查询:

   var today = new Date();
   var startOfToday = new Date(today.getFullYear(), today.getMonth(), today.getDate());
   MyModel.find({created_on: {$gte: startOfToday}}, function (err, docs) { ... });

昨天的第二次查询:

   var yesterday = new Date();    
   yesterday = yesterday.setDate(today.getDate() - 1);
   var startOfYesterday = new Date(yesterday.getFullYear(), yesterday.getMonth(), yesterday.getDate());
   MyModel.find({created_on: {$gte: startOfYesterday, $lt: startOfToday}}, function (err, docs) { ... });

第三次查询其他内容:

   MyModel.find({created_on: {$lt: startOfYesterday}}, function (err, docs) { ... });

【讨论】:

    猜你喜欢
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 2019-01-19
    • 2019-06-06
    • 2015-01-03
    • 2013-11-25
    相关资源
    最近更新 更多