在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 相关文章推荐
允许phpmyadmin空密码登录的配置方法
May 29 PHP
ThinkPHP令牌验证实例
Jun 18 PHP
如何让搜索引擎抓取AJAX内容解决方案
Aug 25 PHP
php cookie名使用点号(句号)会被转换
Oct 23 PHP
使用php的HTTP请求的库Requests实现美女图片墙
Feb 22 PHP
php微信支付接口开发程序
Aug 02 PHP
详解Yii2 定制表单输入字段的标签和样式
Jan 04 PHP
php+redis实现多台服务器内网存储session并读取示例
Jan 12 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
Feb 23 PHP
php批量转换文件夹下所有文件编码的函数类
Aug 06 PHP
如何利用预加载优化Laravel Model查询详解
Aug 11 PHP
关于PhpStorm设置点击编辑文件自动定位源文件的实现方式
Dec 30 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
星际初学者游戏中永远要做的事
2020/03/04 星际争霸
thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例
2019/07/03 PHP
javascript 程序库的比较(一)之DOM功能
2010/04/07 Javascript
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
js数组转json并在后台对其解析具体实现
2013/11/20 Javascript
jquery.post用法关于type设置问题补充
2014/01/03 Javascript
jquery操作select详解(取值,设置选中)
2014/02/07 Javascript
JavaScript Window浏览器对象模型方法与属性汇总
2015/04/20 Javascript
input file上传 图片预览功能实例代码
2016/10/25 Javascript
AngularJS页面传参的5种方式
2017/04/01 Javascript
Angular排序实例详解
2017/06/28 Javascript
自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结
2017/08/18 Javascript
JS库particles.js创建超炫背景粒子插件(附源码下载)
2017/09/13 Javascript
webpack4.x开发环境配置详解
2018/08/04 Javascript
node版本管理工具n包使用教程详解
2018/11/09 Javascript
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
ajax跨域访问遇到的问题及解决方案
2019/05/23 Javascript
浅谈javascript错误处理
2019/08/11 Javascript
修改python plot折线图的坐标轴刻度方法
2018/12/13 Python
python实现低通滤波器代码
2020/02/26 Python
python 函数嵌套及多函数共同运行知识点讲解
2020/03/03 Python
python中pdb模块实例用法
2021/01/15 Python
python爬取抖音视频的实例分析
2021/01/19 Python
详解HTML5中表单验证的8种方法介绍
2016/12/19 HTML / CSS
漫威玩具服装及周边商品官方购物网站:Marvel Shop
2019/05/11 全球购物
加拿大的标志性百货公司:Hudson’s Bay(哈得逊湾)
2019/09/03 全球购物
印尼购物网站:iLOTTE
2019/10/16 全球购物
会计实习自我鉴定
2013/12/04 职场文书
县委务虚会发言材料
2014/10/20 职场文书
情侣之间的道歉短信
2015/05/12 职场文书
农村婚礼司仪主持词
2015/06/29 职场文书
小学教师教学反思
2016/02/24 职场文书
建国70周年的心得体会(2篇)
2019/09/20 职场文书
python通配符之glob模块的使用详解
2021/04/24 Python
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
2022/06/21 Java/Android