栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

ThinkPHP6 MongoDB 实现附近的人功能

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ThinkPHP6 MongoDB 实现附近的人功能

一、话不多少直接上代码

 
    public function mongo($pipeline = [])
    {
        return $this->collection()->cmd([
            'aggregate' => $this->name,
            'pipeline' => $pipeline,
            'explain' => false,
        ]);
    }


    
    public function collection()
    {
        return Db::connect($this->connection)->name($this->name);
    }





    public function SchoolInfoList(Request $request)
    {
        $get = $request->get();

        try {
            $data = $this->mongo([
                ['$geoNear'=>
                   ['near'=>[floatval($get[0]),floatval($get[1])],// 参数一 经度 参数二纬度
                        'query' => ['school_audit'=>1],
                        'spherical'=>true,
                        'distanceMultiplier'=>intval(6378137),
                        'maxDistance'=>floatval(50000/6378137),
                        'distanceField'=>"distance"]
                ]]);
        }catch (Exception $exception){
            return  fail('附近暂无学校');
        }

        if(empty($data))
        {
            return  fail('附近暂无学校');
        }

        //距离处理
        foreach ($data as &$val)
        {
            $val['distance'] = round($val['distance']/1000,1);
        }
       return success($data,200001,'获取附近学校成功');

    }



二、原生语句

db.school.aggregate({
    $geoNear:{
		query:{school_audit:1}, // 查询条件 因为这里我这个业务有审核的这个东西 可以去掉
        near: [121.55892,31.243515], // 当前坐标
        spherical: true, // 计算球面距离
        distanceMultiplier: 6378137, // 地球半径,单位是米,那么的除的记录也是米
        maxDistance: 100000/6378137, // 过滤条件100000米内,需要弧度
        distanceField: "distance",// 距离字段别名
    }
})

   显示与当前的距离

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1006464.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号