You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB 聚合查询如何实现按日期分组 每个日期仅返回1条结果

MongoDB聚合查询按自然日去重解决方案

核心调整逻辑

要实现每个自然日期仅返回1条结果,需要在$lookup的子管道中新增按日期分组的阶段,优先保留每日最新的一条记录即可。

调整后的查询语句

.aggregate([
  {
    $lookup: {
      from: 'community_stats',
      as: 'stats',
      let: { id: '$_id' },
      pipeline: [
        {
          $match: {
            $expr: { $eq: ['$community', '$$id'] },
          },
        },
        // 先按时间倒序,保证同一日内最新的记录排在最前
        { $sort: { date: -1 } },
        // 按自然日期分组,每组仅保留第一条(当日最新)
        {
          $group: {
            _id: {
              // 按年/月/日维度分组,也可以用$dateToString转成'%Y-%m-%d'格式作为分组id
              year: { $year: '$date' },
              month: { $month: '$date' },
              day: { $dayOfMonth: '$date' }
            },
            latestDoc: { $first: '$$ROOT' }
          }
        },
        // 将分组拿到的文档还原为原始结构
        { $replaceRoot: { newRoot: '$latestDoc' } },
        // 分组后重新排序,保证返回结果是按时间倒序排列
        { $sort: { date: -1 } },
        // 取最近5天的记录
        { $limit: 5 }
      ],
    },
  },
])

补充说明

如果需要保留当日最早的记录,把$first换成$last即可。如果涉及时区问题,可以在$year/$month/$dayOfMonth或者$dateToString操作符中添加timezone参数指定时区,避免日期计算偏差。

内容的提问来源于stack exchange,提问作者Jordan Pinski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:06:04