如何在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
相关产品推荐
相关产品推荐

