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

如何在MongoDB聚合中为每个文档生成随机ISO日期?

在MongoDB聚合中生成随机ISO日期

你当前的代码{ date: ISODate() }会给每个文档生成当前时间的ISO日期。要生成随机ISO日期,推荐用聚合操作符结合时间范围来实现,以下是具体方案:

生成指定时间范围内的随机日期

这是最常用的场景,比如生成过去一年以内的随机日期:

{
  date: {
    $dateFromParts: {
      timestamp: {
        $floor: {
          $add: [
            // 计算起始时间戳:当前时间往前推365天
            { $toLong: { $subtract: [new Date(), 365 * 24 * 60 * 60 * 1000] } },
            // 生成0到365天毫秒数之间的随机偏移量
            { $multiply: [{ $rand: {} }, 365 * 24 * 60 * 60 * 1000] }
          ]
        }
      }
    }
  }
}

如果需要自定义时间范围(比如2020-01-01到2023-12-31),只需要调整起始和结束时间即可:

{
  date: {
    $dateFromParts: {
      timestamp: {
        $floor: {
          $add: [
            { $toLong: new Date("2020-01-01") },
            { $multiply: [
                { $rand: {} },
                // 计算时间范围的总毫秒数
                { $subtract: [{ $toLong: new Date("2023-12-31") }, { $toLong: new Date("2020-01-01") }] }
              ]
            }
          ]
        }
      }
    }
  }
}

代码说明

  • $rand:生成0到1之间的随机浮点数
  • $toLong:将日期转为毫秒级时间戳
  • $subtract:计算时间差或起始时间
  • $multiply:将随机数与时间范围总毫秒数相乘,得到随机偏移量
  • $floor:对结果取整,确保时间戳为整数
  • $dateFromParts:将时间戳转回ISO格式日期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:47:11