在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常用代码
Nov 23 PHP
PHP中ADODB类详解
Mar 25 PHP
php获取当前网址url并替换参数或网址的方法
Jun 06 PHP
Apache下禁止php文件被直接访问的解决方案
Apr 25 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
Jun 17 PHP
codeigniter框架批量插入数据
Jan 09 PHP
递归删除一个节点以及该节点下的所有节点示例
Mar 19 PHP
Laravel实现用户注册和登录
Jan 23 PHP
THINKPHP截取中文字符串函数实例代码
Mar 20 PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
Oct 21 PHP
通过PHP实现获取访问用户IP
May 09 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 flush类输出缓冲剖析
2008/10/19 PHP
PHP开发框架laravel安装与配置教程
2015/03/13 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
2015/12/28 PHP
PHP中call_user_func_array回调函数的用法示例
2016/11/26 PHP
php 截取GBK文档某个位置开始的n个字符方法
2017/03/08 PHP
Extjs4 Treegrid 使用心得分享(经验篇)
2013/07/01 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
在Ubuntu上安装最新版本的Node.js
2014/07/14 Javascript
原生javascript实现拖动元素示例代码
2014/09/01 Javascript
Bootstrap Metronic完全响应式管理模板学习笔记
2016/07/08 Javascript
JS动态给对象添加事件的简单方法
2016/07/19 Javascript
解决js ajax同步请求造成浏览器假死的问题
2018/01/18 Javascript
React中使用UEditor百度富文本的方法
2018/08/22 Javascript
15个顶级开源JavaScript框架和库
2018/10/10 Javascript
vue组件数据传递、父子组件数据获取,slot,router路由功能示例
2019/03/19 Javascript
nodejs nedb 封装库与使用方法示例
2020/02/06 NodeJs
解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)
2020/07/20 Javascript
Vue实现点击当前行变色
2020/12/14 Vue.js
在Python中用split()方法分割字符串的使用介绍
2015/05/20 Python
python3.5仿微软计算器程序
2020/03/30 Python
python paramiko利用sftp上传目录到远程的实例
2019/01/03 Python
通过python实现随机交换礼物程序详解
2019/07/10 Python
在python中利用pycharm自定义代码块教程(三步搞定)
2020/04/15 Python
python和js交互调用的方法
2020/06/23 Python
基于Python的接口自动化unittest测试框架和ddt数据驱动详解
2021/01/27 Python
欧洲最大的拼图游戏商店:JigsawPuzzle.co.uk
2018/07/04 全球购物
苹果音乐订阅:Apple Music
2018/08/02 全球购物
UNIX命令速查表
2012/03/10 面试题
医药营销专业个人自荐信
2013/09/29 职场文书
单位刻章介绍信范文
2014/01/11 职场文书
淘宝店铺营销方案
2014/02/13 职场文书
安全承诺书范文
2014/03/26 职场文书
公司总经理任命书
2014/06/05 职场文书
2014年干部作风建设总结
2014/10/23 职场文书
办公经费申请报告
2015/05/15 职场文书
仙境之桥观后感
2015/06/16 职场文书