在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 相关文章推荐
PHP编程与应用
Oct 09 PHP
php下检测字符串是否是utf8编码的代码
Jun 28 PHP
php5 pdo新改动加载注意事项
Sep 11 PHP
php zip文件解压类代码
Dec 02 PHP
php 生成唯一id的几种解决方法
Mar 08 PHP
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
May 15 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
Oct 15 PHP
thinkphp文件引用与分支结构用法实例
Nov 26 PHP
PHP答题类应用接口实例
Feb 09 PHP
PHP常用文件操作函数和简单实例分析
Jun 03 PHP
phpMyAdmin通过密码漏洞留后门文件
Nov 20 PHP
RSA实现JS前端加密与PHP后端解密功能示例
Aug 05 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
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
php的webservice的wsdl的XML无法显示问题的解决方法
2014/03/11 PHP
js+php实现静态页面实时调用用户登陆状态的方法
2015/01/04 PHP
浅谈PHP中的错误处理和异常处理
2017/02/04 PHP
Thinkphp5框架使用validate实现验证功能的方法
2019/08/27 PHP
一个js封装的不错的选项卡效果代码
2008/02/15 Javascript
js 表格隔行颜色
2009/12/02 Javascript
取得窗口大小 兼容所有浏览器的js代码
2011/08/09 Javascript
JSONP跨域的原理解析及其实现介绍
2014/03/22 Javascript
jquery中 $.expr使用实例介绍
2014/06/09 Javascript
JS实现可直接显示网页代码运行效果的HTML代码预览功能实例
2015/08/06 Javascript
jQuery的图片轮播插件PgwSlideshow使用详解
2016/08/11 Javascript
Node.js的基本知识简单汇总
2016/09/19 Javascript
jQuery实现百度登录框的动态切换效果
2017/04/21 jQuery
JavaScript实现微信号随机切换代码
2018/03/09 Javascript
vue.js过滤器+ajax实现事件监听及后台php数据交互实例
2018/05/22 Javascript
详解Vue中数组和对象更改后视图不刷新的问题
2018/09/21 Javascript
AJAX在JQuery中的应用详解
2019/01/30 jQuery
微信小程序基于高德地图查找位置并显示文字
2019/10/30 Javascript
解决vue初始化项目时,一直卡在Project description上的问题
2019/10/31 Javascript
[02:28]DOTA2亚洲邀请赛附加赛 RECAP赛事回顾
2015/01/29 DOTA
Python类的基础入门知识
2008/11/24 Python
python重试装饰器示例
2014/02/11 Python
Python3读取文件常用方法实例分析
2015/05/22 Python
Windows安装Python、pip、easy_install的方法
2017/03/05 Python
Python 中 Virtualenv 和 pip 的简单用法详解
2017/08/18 Python
Python替换月份为英文缩写的实现方法
2019/07/15 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
Python Matplotlib绘图基础知识代码解析
2020/08/31 Python
HTML5中的拖放实现详解
2017/08/23 HTML / CSS
欧洲顶级的童装奢侈品购物网站:Bambini Fashion(面向全球)
2018/04/24 全球购物
流行文化收藏品:Sideshow(DC漫画,星球大战,漫威)
2019/03/17 全球购物
医学生自荐信
2013/12/03 职场文书
音乐教师个人总结
2015/02/06 职场文书
小学教研工作总结2015
2015/05/13 职场文书
2016暑期师德培训心得体会
2016/01/09 职场文书