【问题标题】:Mongodb Aggregate date range to retrieve last record of each monthMongodb聚合日期范围以检索每个月的最后一条记录
【发布时间】:2016-12-05 14:16:06
【问题描述】:

我希望能够设置一个日期范围,然后只检索每个月的最后一条记录。

我知道怎么做,但需要让你们在这方面比我聪明得多。

我想我会做一个 $group,其中包括来自“local_date_time”的monthyear 数字。然后,我将 $sort yearmonthlocal_date_time,然后在下一阶段,$project 每个只有 $last 记录。

这是最好的方法,还是有更清洁更有效的方法?谢谢,马特

【问题讨论】:

  • 您能否举例说明您的文件和请求?
  • 我建议首先使用$match 匹配'$gte` 和$lte 范围内的日期然后$group 然后sort
  • @the_mahasagar 感谢您的建议。我已经尝试过这样做并且遇到了问题。我在这个线程中添加了一个额外的答案来解释。你觉得这个我煮过头了吗?谢谢

标签: mongodb aggregation-framework


【解决方案1】:
db.users.aggregate({
$match: {
        'createdDate': {
            $gte: new Date('2015'+'-01-01T00:00:00.000+0530'), 
            $lte: new Date('2015'+'-12-31T23:59:59.000+0530') 
        }
    },
},{
$group:{
        _id : { month: { $month: '$createdDate' }},
        lastUserEmail: { $last: "$email" }
    }
});

$last :从每个组的最后一个文档中返回一个值,检查This..

我刚刚检查了createdDate, 您可以相应地更改字段..!

希望,这会在某种程度上帮助你..!

【讨论】:

  • 感谢您对此的帮助,似乎运行良好,我还有其他问题正在处理日期范围内的 $match。我会试试你的方法,看看效果如何
猜你喜欢
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 2021-07-16
  • 1970-01-01
  • 2023-01-12
  • 2023-03-24
  • 1970-01-01
  • 2018-12-06
相关资源
最近更新 更多