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

如何将指定MongoDB查询转换为jenssegers/laravel-mongodb写法?

把MongoDB原生查询转成jenssegers/laravel-mongodb写法

嘿,这事儿不难,我帮你把这段原生查询转换成Laravel MongoDB扩展的写法,还会给你两种常用的实现方式:

首先,先明确你原生查询的逻辑:通过$expr操作符,判断created_at字段对3600取模后的结果是否小于等于59,说白了就是筛选出那些created_at的时间戳刚好落在整点前后一分钟内的文档。

方式一:使用查询构造器

直接用whereRaw传入MongoDB的原生查询数组就行,这是最直接的方式:

DB::collection('collection')
    ->whereRaw([
        '$expr' => [
            '$lte' => [
                ['$mod' => ['$created_at', 3600]],
                59
            ]
        ]
    ])->get();

方式二:使用Eloquent模型

如果你已经定义了对应集合的Eloquent模型(比如叫YourModel),写法类似:

YourModel::whereRaw([
    '$expr' => [
        '$lte' => [
            ['$mod' => ['$created_at', 3600]],
            59
        ]
    ]
])->get();

额外提示:处理ISODate类型的created_at

如果你的created_at字段存的是MongoDB的ISODate对象而不是时间戳,记得先把它转成时间戳再取模,用$toLong操作符就行:

// 针对ISODate类型的created_at
DB::collection('collection')
    ->whereRaw([
        '$expr' => [
            '$lte' => [
                ['$mod' => [['$toLong' => '$created_at'], 3600]],
                59
            ]
        ]
    ])->get();

这样写就完全对应你给出的原生查询逻辑了,jenssegers的扩展对这种原生MongoDB查询数组的支持很好,直接用whereRaw传入就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:19:14