在php7中MongoDB实现模糊查询的方法详解
这里有新鲜出炉的 PHP 教程,程序狗速度看过来!
PHP 开源脚本语言
PHP(外文名: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,入门门槛较低,易于学习,使用广泛,主要适用于 web 开发领域。PHP 的文件后缀名为 php。
MongoDB 模糊查询语句相信对大家来说都不陌生,这篇文章主要给大家介绍了在 php 7 中 MongoDB 实现模糊查询的方法, 文中给出了详细的介绍和示例代码,对大家具有一定的参考学习价值,需要的朋友一起来看看吧。
前言
在实际开发中, 有不少的场景需要使用到模糊查询, MongoDB shell 模糊查询很简单:
db.collection.find({'_id':/^5101/})
上面这句就是查询_id 以'5101'开始的内容。
在老的 MogoDB 中模糊查询挺简单的,这里简单记录下模糊查询的操作方式:
命令行下:
db.letv_logs.find({"ctime":/uname?/i});
php 操作
$query=array("name"=>newMongoRegex("/.*".$name.". * /i"));
$db->find($query);/
下面主要就讲下新 PHP 驱动中怎么查询:
$query=new\MongoDB\Driver\Query('_id'=>['$regex'=>'^5101']);
$this->getManager()->executeQuery($this->dbname.$this->collection,$query);
上面就是新驱动中执行模糊查询, 说实话, 挺吐槽这个新驱动, 相比老的驱动, 这个函数名也太长了吧。。。都快超过 swift 的函数名了。而且老驱动上的不少功能都在新驱动上干掉了。虽然提供了一个mongodb php library的类库来操作, 但是这个库里面有 60 多个文件,有时候比我项目文件还要多,这是闹哪样。这我建议自己去封装一个 Driver 类来使用。
上面吐槽吐的有点跑题了, 除了直接模糊查询, 在和$in或 $nin使用的时候, 需要特别注意下:
$filter=['_id'=>['$in'=>['$regex'=>'^5101']]];
如果你像上面那么写 filter 的话, 执行的时候将抛出一个致命错误:
PHPFatalerror:UncaughtMongoDB\Driver\Exception\ConnectionException:$in needs an arrayinfilename
这里说$in里面需要提供一个数组, 那么我们把上面的 $filter改下, 给它弄个数组过去:
$filter=['_id'=>['$in'=>[['$regex'=>'^5101']]];
但是不幸的是, 还是无法成功的得到想要的结果:
PHPFatalerror:UncaughtMongoDB\Driver\Exception\ConnectionException:cannot nest $ under $ininfilename
这里说$in中不能出现 $, 那咋办呢? 其实在 $in或 $nin中要使用模糊匹配, 需要使用 \MongoDB\BSON\Regex类的实例:
$filter=['_id'=>['$in'=>[new\MongoDB\BSON\Regex('^5101','i')]]];
这次终于得到我们想要的结果了。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对 PHPERZ 的支持。
来源: http://www.phperz.com/article/17/0810/340005.html