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

