在php7中MongoDB实现模糊查询的方法详解


Posted in PHP onMay 03, 2017

前言

在实际开发中, 有不少的场景需要使用到模糊查询, MongoDB shell 模糊查询很简单:

db.collection.find({'_id': /^5101/})

上面这句就是查询_id以'5101'开始的内容。

在老的MogoDB中模糊查询挺简单的,这里简单记录下模糊查询的操作方式:

命令行下:

db.letv_logs.find({"ctime":/uname?/i});

php操作

$query=array("name"=>new MongoRegex("/.*”.$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的话, 执行的时候将抛出一个致命错误:

PHP Fatal error: Uncaught MongoDB\Driver\Exception\ConnectionException: $in needs an array in filename

这里说$in里面需要提供一个数组, 那么我们把上面的$filter改下, 给它弄个数组过去:

$filter = ['_id' => ['$in' => [['$regex' => '^5101']]];

但是不幸的是, 还是无法成功的得到想要的结果:

PHP Fatal error: Uncaught MongoDB\Driver\Exception\ConnectionException: cannot nest $ under $in in filename

这里说$in中不能出现$, 那咋办呢? 其实在$in$nin中要使用模糊匹配, 需要使用\MongoDB\BSON\Regex类的实例:

$filter = ['_id' => ['$in' => [new \MongoDB\BSON\Regex('^5101','i')]]];

这次终于得到我们想要的结果了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
不用mod_rewrite直接用php实现伪静态化页面代码
Oct 04 PHP
PHP类中Static方法效率测试代码
Oct 17 PHP
PHP用身份证号获取星座和生肖的方法
Nov 07 PHP
php获得url参数中具有&的值的方法
Mar 05 PHP
PHP自定session保存路径及删除、注销与写入的方法
Nov 18 PHP
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
Nov 24 PHP
php使用COPY函数更新配置文件的方法
Jun 18 PHP
PHP数组函数array_multisort()用法实例分析
Apr 02 PHP
php生成带logo二维码方法小结
Apr 08 PHP
浅谈PHP中的数据传输CURL
Sep 06 PHP
PHP简单实现上一页下一页功能示例
Sep 14 PHP
CI框架(CodeIgniter)实现的数据库增删改查操作总结
May 23 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
May 02 #PHP
php 使用curl模拟ip和来源进行访问的实现方法
May 02 #PHP
ThinkPHP实现静态缓存和动态缓存示例代码
May 02 #PHP
php 函数使用可变数量的参数方法
May 02 #PHP
PHP 序列化和反序列化函数实例详解
Jul 18 #PHP
php头像上传预览实例代码
May 02 #PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
May 02 #PHP
You might like
DC四月将推出百页特刊漫画 纪念小丑诞生80周年
2020/04/09 欧美动漫
索尼SONY SRF-S83/84电路分析和打磨
2021/03/02 无线电
php编写简单的文章发布程序
2015/06/18 PHP
thinkPHP实现将excel导入到数据库中的方法
2016/04/22 PHP
详解Laravel视图间共享数据与视图Composer
2016/08/04 PHP
很棒的学习jQuery的12个网站推荐
2011/04/28 Javascript
node.js中的http.request.end方法使用说明
2014/12/10 Javascript
JavaScript编写页面半透明遮罩效果的简单示例
2016/05/09 Javascript
javascript js 操作数组 增删改查的简单实现
2016/06/20 Javascript
AngularJS入门教程之ng-checked 指令详解
2016/08/01 Javascript
vue组件实现弹出框点击显示隐藏效果
2020/10/26 Javascript
浅谈vue父子组件怎么传值
2018/07/21 Javascript
vue 中使用print.js导出pdf操作
2020/11/13 Javascript
微信小程序input抖动问题的修复方法
2021/03/03 Javascript
python抓取最新博客内容并生成Rss
2015/05/17 Python
python函数局部变量用法实例分析
2015/08/04 Python
Python3 循环语句(for、while、break、range等)
2017/11/20 Python
python获取指定字符串中重复模式最高的字符串方法
2018/06/29 Python
Python调用C++,通过Pybind11制作Python接口
2018/10/16 Python
python如何制作缩略图
2019/04/30 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
2019/08/22 Python
python爬虫开发之使用Python爬虫库requests多线程抓取猫眼电影TOP100实例
2020/03/10 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
2020/11/17 Python
Hotter Shoes英国官网:英伦风格,舒适的鞋子
2017/12/28 全球购物
JD Sports芬兰:英国领先的运动鞋和运动服饰零售商
2018/11/16 全球购物
优秀毕业生求职推荐信范文
2013/11/21 职场文书
两只小狮子教学反思
2014/02/05 职场文书
2014两会优秀的心得体会范文
2014/03/17 职场文书
企业爱岗敬业演讲稿
2014/09/04 职场文书
2014年医院十一国庆节活动方案
2014/09/15 职场文书
2014年社团工作总结范文
2014/11/27 职场文书
2016年春季趣味运动会开幕词
2016/03/04 职场文书
如何书写邀请函?
2019/06/24 职场文书
浅谈mysql返回Boolean类型的几种情况
2021/06/04 MySQL
Kubernetes控制节点的部署
2022/04/01 Servers
MySQL 自动填充 create_time 和 update_time
2022/05/20 MySQL