Mongo geoNear query 中文模糊搜索在PHP中的使用

查阅全网和官方文档几乎都是这种形式:

 db.user.find(name:/汉字/);
 db.user.find(name:/^汉字/);
 db.user.find(name:/汉字/i);

亲测在PHP中都不管用

实际在PHP中不应该带着前后的反斜杠,主要起作用的是$options中的参数,设置为imx即可实现模糊查询的效果
关于$options的选项说明

  • i 忽略大小写
  • m 多行匹配模式
  • x 忽略非转义的空白字符
  • s 单行匹配模式
  • i,m,x,s可以组合使用

PHP中有效写法:

$query['name'] = ['$regex' => "$name",'$options'=>'imx'];

PHP中无效写法汇总:

$query['name'] = ['$regex' => "/$name/",'$options'=>'imx'];
$query['name'] = ['$regex' => "/^$name/"];
$query['name'] = ['$regex' => "/$name/i"];

一个完整查询示例:

        $query['name'] = ['$regex' => "$name",'$options'=>'imx'];
        $query['is_show'] = ['$eq' => 1];
        
        $options = [
            //geo聚合查询
            [
                '$geoNear' => [
                    'near' => ['type' => 'Point', 'coordinates' => [(double)$lng, (double)$lat]],
                    'distanceField' => 'distance',
                    'spherical' => true,
                    'distanceMultiplier' => 0.001,
                    'query' => $query
                ],
            ],
            //分页,页码处理
            [
                '$skip' => (int)$page,
            ],
            //限制返回数据条数
            [
                '$limit' => (int)$pageSize
            ],
        ];
    
        return $this->mongo->aggregate($options)->toArray();

你可能感兴趣的:(Mongo geoNear query 中文模糊搜索在PHP中的使用)