在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中几种常见安全设置详解
Apr 06 PHP
数组与类使用PHP的可变变量名需要的注意的问题
Jun 20 PHP
3个PHP多维数组转为一维数组的方法实例
Mar 13 PHP
Laravel中使用自己编写类库的3种方法
Feb 10 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
Apr 14 PHP
yii实现model添加默认值的方法(2种方法)
Jan 06 PHP
非常实用的php验证码类
May 15 PHP
php车辆违章查询数据示例
Oct 14 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
Feb 10 PHP
PHP7导出Excel报ERR_EMPTY_RESPONSE解决方法
Apr 16 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
Mar 26 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
May 25 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.ini 中文版
2006/10/28 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
2011/06/10 PHP
PHP管理内存函数 memory_get_usage()使用介绍
2012/09/23 PHP
PHP共享内存用法实例分析
2016/02/12 PHP
IE6下js通过css隐藏select的一个bug
2010/08/16 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
2014/06/24 Javascript
js中window.open打开一个新的页面
2014/08/10 Javascript
详解JavaScript的流程控制语句
2015/11/30 Javascript
jQuery实现form表单基于ajax无刷新提交方法详解
2015/12/08 Javascript
原生js和jQuery实现淡入淡出轮播效果
2015/12/25 Javascript
学好js,这些js函数概念一定要知道【推荐】
2017/01/19 Javascript
jquery处理checkbox(复选框)是否被选中实例代码
2017/06/12 jQuery
详解React Native 屏幕适配(炒鸡简单的方法)
2018/06/11 Javascript
vue实现登录页面的验证码以及验证过程解析(面向新手)
2019/08/02 Javascript
使用 JavaScript 创建并下载文件(模拟点击)
2019/10/25 Javascript
python3.0 字典key排序
2008/12/24 Python
Python实现的中国剩余定理算法示例
2017/08/05 Python
恢复百度云盘本地误删的文件脚本(简单方法)
2017/10/21 Python
使用pandas实现csv/excel sheet互相转换的方法
2018/12/10 Python
python使用minimax算法实现五子棋
2019/07/29 Python
PyQt5通信机制 信号与槽详解
2019/08/07 Python
Pytorch 数据加载与数据预处理方式
2019/12/31 Python
Python使用struct处理二进制(pack和unpack用法)
2020/11/12 Python
Pycharm中使用git进行合作开发的教程详解
2020/11/17 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
CSS3实现跳动的动画效果
2016/09/12 HTML / CSS
CSS3 Media Queries详细介绍和使用实例
2014/05/08 HTML / CSS
canvas之万花筒效果的简单实现(推荐)
2016/08/16 HTML / CSS
CSS3实现菜单悬停效果
2020/11/17 HTML / CSS
欧洲最大的婴幼儿服装及内衣公司:Petit Bateau(小帆船)
2016/08/16 全球购物
伦敦剧院门票:From The Box Office
2018/06/30 全球购物
CK巴西官方网站:Calvin Klein巴西
2019/07/19 全球购物
优秀技术工人先进材料
2014/02/17 职场文书
2015年食品安全宣传周活动总结
2015/07/09 职场文书
新闻稿怎么写
2015/07/18 职场文书
高中信息技术教学反思
2016/02/16 职场文书