在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 相关文章推荐
mysql下创建字段并设置主键的php代码
May 16 PHP
PHP获取表单textarea数据中的换行问题
Sep 10 PHP
php中将数组存到文件里的实现代码
Jan 19 PHP
解析PHP中ob_start()函数的用法
Jun 24 PHP
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
Jun 24 PHP
兼容各大浏览器带关闭按钮的漂浮多组图片广告代码
Jun 05 PHP
php上传图片获取路径及给表单字段赋值的方法
Jan 23 PHP
PHP用函数嵌入网站访问量计数器
Oct 27 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
Apr 08 PHP
PHP simplexml_load_string()函数实例讲解
Feb 03 PHP
php+mysql开发的最简单在线题库(在线做题系统)完整案例
Mar 30 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
Oct 16 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
memcache一致性hash的php实现方法
2015/03/05 PHP
微信公众号判断用户是否已关注php代码解析
2016/06/24 PHP
Yii配置与使用memcached缓存的方法
2016/07/13 PHP
实例分析PHP将字符串转换成数字的方法
2019/01/27 PHP
滚动图片效果 jquery实现回旋滚动效果
2013/01/08 Javascript
Jquery中val()表单取值赋值的实例代码
2013/08/15 Javascript
jquery ajax 如何向jsp提交表单数据
2015/08/23 Javascript
String字符串截取的四种方式总结
2016/11/28 Javascript
JavaScript 过滤关键字
2017/03/20 Javascript
Vue中使用vux的配置详解
2017/05/05 Javascript
JS 组件系列之BootstrapTable的treegrid功能
2017/06/16 Javascript
Vue+element-ui 实现表格的分页功能示例
2018/08/18 Javascript
JQuery扩展对象方法操作示例
2018/08/21 jQuery
JS实现的tab页切换效果完整示例
2018/12/18 Javascript
es6中使用map简化复杂条件判断操作实例详解
2020/02/19 Javascript
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
初步剖析C语言编程中的结构体
2016/01/16 Python
通过5个知识点轻松搞定Python的作用域
2016/09/09 Python
python中关于for循环的碎碎念
2017/06/30 Python
Python实现输出程序执行进度百分比的方法
2017/09/16 Python
python机器学习库常用汇总
2017/11/15 Python
Python实现返回数组中第i小元素的方法示例
2017/12/04 Python
Python语言生成水仙花数代码示例
2017/12/18 Python
widows下安装pycurl并利用pycurl请求https地址的方法
2018/10/15 Python
在Python运行时动态查看进程内部信息的方法
2019/02/22 Python
django-allauth入门学习和使用详解
2019/07/03 Python
Python调用接口合并Excel表代码实例
2020/03/31 Python
如何使用pycharm连接Databricks的步骤详解
2020/09/23 Python
recorder.js 基于Html5录音功能的实现
2020/05/26 HTML / CSS
网上快餐厅创业计划书
2014/02/01 职场文书
2014年党务公开实施方案
2014/02/27 职场文书
会计专业个人自我鉴定
2014/03/21 职场文书
驳回起诉裁定书
2015/05/19 职场文书
施工现场安全管理制度
2015/08/05 职场文书
写好求职信的技巧解密
2019/05/14 职场文书
MySQL 主从复制数据不一致的解决方法
2022/03/18 MySQL