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

如何编写MongoDB查询获取对象数组最新createdAt后按日期范围过滤计数

MongoDB 查询实现方案

实现思路

  • 第一步:使用聚合管道的$addFields阶段,对每个文档提取details数组中最大的createdAt值(即最新创建时间)
  • 第二步:使用$match阶段,对第一步得到的最新创建时间应用日期范围过滤条件
  • 第三步:使用$count阶段统计符合过滤条件的总记录数

完整查询示例

假设你要过滤的日期范围是「2021-06-15 到 2021-06-17」,查询语句如下:

db.collection.aggregate([
  // 步骤1:计算每个文档details数组的最新createdAt
  {
    $addFields: {
      latestCreatedAt: { $max: "$details.createdAt" }
    }
  },
  // 步骤2:应用日期范围过滤,可根据需求修改起止时间
  {
    $match: {
      latestCreatedAt: {
        $gte: ISODate("2021-06-15T00:00:00.000Z"),
        $lte: ISODate("2021-06-17T23:59:59.999Z")
      }
    }
  },
  // 步骤3:统计符合条件的总记录数
  {
    $count: "matchedRecordCount"
  }
])

结果说明

执行后会返回类似如下结构的结果:

{ "matchedRecordCount" : 1 }

其中matchedRecordCount就是符合要求的记录总数。如果不需要统计总数,只需要获取符合条件的文档列表,去掉最后一步的$count阶段即可。

注意:如果存在details为空数组或者没有details字段的文档,上述查询会自动排除这类文档,如需保留可在$match阶段添加对应的判空逻辑。

内容的提问来源于stack exchange,提问作者Dinesh Jangid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:24:07