在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 相关文章推荐
提取HTML标签
Oct 09 PHP
如何在PHP中使用Oracle数据库(1)
Oct 09 PHP
php5中类的学习
Mar 28 PHP
php通过COM类调用组件的实现代码
Jan 11 PHP
PHP人民币金额数字转中文大写的函数代码
Feb 27 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
Jun 17 PHP
跟我学Laravel之路由
Oct 15 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
May 13 PHP
JSON两种结构之对象和数组的理解
Jul 19 PHP
thinkPHP5.0框架应用请求生命周期分析
Mar 25 PHP
yii插入数据库防并发的简单代码
May 27 PHP
PHP PDOStatement::setAttribute讲解
Feb 01 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版)
2012/08/21 PHP
关于初学PHP时的知识积累总结
2013/06/07 PHP
php+mysqli使用面向对象方式查询数据库实例
2015/01/29 PHP
linux mint下安装phpstorm2020包括JDK部分的教程详解
2020/09/17 PHP
js获取通过ajax返回的map型的JSONArray的方法
2014/01/09 Javascript
Array 重排序方法和操作方法的简单实例
2014/01/24 Javascript
jquery实现点击展开列表同时隐藏其他列表
2015/08/10 Javascript
浏览器复制插件zeroclipboard使用指南
2016/03/26 Javascript
JS上传组件FileUpload自定义模板的使用方法
2016/05/10 Javascript
基于angularJS的表单验证指令介绍
2016/10/21 Javascript
9个让JavaScript调试更简单的Console命令
2016/11/14 Javascript
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
2017/07/12 jQuery
python爬取安居客二手房网站数据(实例讲解)
2017/10/19 Javascript
基于ES6作用域和解构赋值详解
2017/11/03 Javascript
vue+iview 实现可编辑表格的示例代码
2018/10/31 Javascript
详解服务端预渲染之Nuxt(介绍篇)
2019/04/07 Javascript
Django模板继承 extend标签实例代码详解
2019/05/16 Javascript
微信小程序8种数据通信的方式小结
2020/02/03 Javascript
[01:55]《走出家门看比赛》——DOTA2 2015国际邀请赛同城线下观战
2015/07/18 DOTA
Python下的subprocess模块的入门指引
2015/04/16 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2018/01/04 Python
pytorch对可变长度序列的处理方法详解
2018/12/08 Python
python 中如何获取列表的索引
2019/07/02 Python
PyCharm2018 安装及破解方法实现步骤
2019/09/09 Python
用Python实现定时备份Mongodb数据并上传到FTP服务器
2021/01/27 Python
CSS3 Flex 弹性布局实例代码详解
2018/11/01 HTML / CSS
专业毕业生个性的自我评价
2013/10/03 职场文书
总裁助理岗位职责
2014/02/17 职场文书
如何写一封打动人心的求职信
2014/02/17 职场文书
先进单位申报材料
2014/12/25 职场文书
个人先进材料范文
2014/12/30 职场文书
解除同居协议书
2015/01/29 职场文书
小学三年级班主任工作经验交流材料
2015/11/02 职场文书
小学作文指导之如何写人?
2019/07/08 职场文书
Pytorch中的数据集划分&正则化方法
2021/05/27 Python
Golang Web 框架Iris安装部署
2022/08/14 Python