在laravel中使用mongodb

1.安装jenssegers/mongodb

composer require jenssegers/mongodb

2.定义model

class XXMODEL extends Jenssegers\Mongodb\Eloquent\Model implements Transformable
{
    use TransformableTrait;

    protected $connection = 'CONNECTTION_NAME';

    protected $collection = 'COLLECTION_NAME';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [];

}

3.列表+筛选+分类

public function list($where){

        if (!empty($where['limit'])) {
            $limit = $where['limit'];
            unset($where['limit']);
        } else {
            $limit = config('repository.pagination.limit');
        }
        $data = XXMODEL::raw(function ($collection) use($limit,$where) {
            //条件
            $aggregate = array();
            //查询数组
            $selectArr = array();
            if(!empty($where['select']['keyword'])){
                $selectArr['keyword'] = ['$regex' => ''. $where['select']['keyword'] . '', '$options' => "i"];
            }
            if(!empty($where['select']['city'])){
                $selectArr['value.city'] = $where['select']['city'];
            }
            //聚合数组
            $groupArr = $groups = array();
            if(!empty($where['groups']['keyword'])){
                $groupArr['keyword'] = '$keyword';
            }
            if(!empty($where['groups']['city'])){
                $groupArr['city'] = '$value.city';
            }
            if(!empty($groupArr)){
                $groups['_id'] = $groupArr;
                $groups['sum_clicks'] = ['$sum' => '$click_nums'];
            }

            $aggregate[]['$match'] = $selectArr;
            if(!empty($groups)){
                $aggregate[]['$group'] = $groups;
            }
            $count = sizeof($collection->aggregate($aggregate)->toArray());
            //先排序在分页
            if(!empty($where['groups']['date'])){
                $sort = ['_id.date' => -1];
            }else{
                $sort = ['date' => -1];
            }
            $aggregate[]['$sort'] = empty($where['sort']) ? $sort : [$where['sort']['name'] => $where['sort']['order']];
            $aggregate[]['$skip'] = ((empty($where['page']) ? 1 : $where['page'])-1) * $limit;
            $aggregate[]['$limit'] = $limit;
            //生成paginate分页的格式方便前端
            return new LengthAwarePaginator($collection->aggregate($aggregate)->toArray(), $count, $limit,!empty($where['page'])?$where['page']:1, [
                'path' => Paginator::resolveCurrentPath(),
                'pageName' => 'page',
            ]);

        });
        return $data;

    }

  

 

转载于:https://www.cnblogs.com/paopaocheng/p/10138508.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值