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

如何在Laravel MongoDB中批量更新日期字段?

解决Laravel MongoDB批量更新日期字段的问题

问题根源

Laravel MongoDB的批量update方法直接通过查询构造器执行,不会触发模型的属性转换逻辑(也就是$dates数组的处理逻辑)。所以直接传Carbon实例会报错,转成字符串又会存成字符串类型;而循环保存虽然能正确存储,但会产生大量数据库请求,性能太差。

方案一:用MongoDB原生$currentDate操作符(推荐)

如果只是要将字段设为当前时间,直接用MongoDB自带的$currentDate操作符,这是原子操作,效率最高,且存储的是MongoDB原生Date类型:

Device::whereIn('serial_number', $serialNumbers)->update([
    '$currentDate' => [
        'status_updated_at' => true
    ]
]);

方案二:自定义时间时用UTCDateTime包装

如果需要设置指定的时间(而非当前服务器时间),可以用Laravel MongoDB底层依赖的MongoDB\BSON\UTCDateTime类来包装时间:

use MongoDB\BSON\UTCDateTime;

// 将Carbon时间转成毫秒级时间戳,UTCDateTime要求传入毫秒格式
$targetTime = new UTCDateTime(Carbon::now()->getTimestamp() * 1000);

Device::whereIn('serial_number', $serialNumbers)->update([
    'status_updated_at' => $targetTime
]);

内容的提问来源于stack exchange,提问作者D'Arcy Rail-Ip

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:50:23