在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 simple_html_dom.php+正则 采集文章代码
Dec 24 PHP
ajax在joomla中的原生态应用代码
Jul 19 PHP
解决File size limit exceeded 错误的方法
Jun 14 PHP
PHP实现多图片上传类实例
Jul 26 PHP
php使用fputcsv()函数csv文件读写数据的方法
Jan 06 PHP
php中JSON的使用与转换
Jan 14 PHP
Laravel 5.3 学习笔记之 错误&日志
Aug 28 PHP
PHP页面跳转实现延时跳转的方法
Dec 10 PHP
浅谈PHP错误类型及屏蔽方法
May 27 PHP
php 删除一维数组中某一个值元素的操作方法
Feb 01 PHP
PHP getDocNamespaces()函数讲解
Feb 03 PHP
laravel框架邮箱认证实现方法详解
Nov 22 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
php+mysql分页代码详解
2008/03/27 PHP
php email邮箱正则
2008/10/08 PHP
PHP操作XML作为数据库的类
2010/12/19 PHP
PHP读取ACCESS数据到MYSQL的代码
2011/05/11 PHP
PHP Ajax实现无刷新附件上传
2016/08/17 PHP
php利用fsockopen GET/POST提交表单及上传文件
2017/05/22 PHP
javascript 强制刷新页面的实现代码
2009/12/13 Javascript
web前端开发也需要日志
2010/12/09 Javascript
jquery 面包屑导航 具体实现
2013/06/05 Javascript
js实现仿QQ秀换装效果的方法
2015/03/04 Javascript
javasript实现密码的隐藏与显示
2015/05/08 Javascript
JS实现图片平面旋转的方法
2016/03/01 Javascript
完美解决浏览器跨域的几种方法(汇总)
2017/05/08 Javascript
bootstrap插件treeview实现全选父节点下所有子节点和反选功能
2017/07/21 Javascript
webpack4打包vue前端多页面项目
2018/09/17 Javascript
详解Express笔记之动态渲染HTML(新手入坑)
2018/12/13 Javascript
详解Vue用cmd创建项目
2019/02/12 Javascript
微信小程序点餐系统开发常见问题汇总
2019/08/06 Javascript
VUE+elementui组件在table-cell单元格中绘制微型echarts图
2020/04/20 Javascript
微信小程序实现列表滚动头部吸顶的示例代码
2020/07/12 Javascript
vue打包静态资源后显示空白及static文件路径报错的解决
2020/09/02 Javascript
[07:06]2018DOTA2国际邀请赛寻真——卫冕冠军Team Liquid
2018/08/10 DOTA
Python实现获取操作系统版本信息方法
2015/04/08 Python
python类装饰器用法实例
2015/06/04 Python
Python 实现购物商城,含有用户入口和商家入口的示例
2017/09/15 Python
Python3调用微信企业号API发送文本消息代码示例
2017/11/10 Python
python内存监控工具memory_profiler和guppy的用法详解
2019/07/29 Python
Flask项目中实现短信验证码和邮箱验证码功能
2019/12/05 Python
Python 读取WAV音频文件 画频谱的实例
2020/03/14 Python
Pycharm中如何关掉python console
2020/10/27 Python
Linux面试经常问的文件系统操作命令
2016/10/04 面试题
上班迟到检讨书
2014/01/10 职场文书
创建青年文明号材料
2014/05/09 职场文书
MySQL触发器的使用
2021/05/24 MySQL
MySQL创建管理子分区
2022/04/13 MySQL
python使用BeautifulSoup 解析HTML
2022/04/24 Python