在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逐行输出(ob_flush与flush的组合)
Feb 04 PHP
php下载文件的代码示例
Jun 29 PHP
PHP header()函数使用详细(301、404等错误设置)
Apr 17 PHP
初识通用数据库操作类――前端easyui-datagrid,form(php)
Jul 31 PHP
Symfony核心类概述
Mar 17 PHP
初识ThinkPHP控制器
Apr 07 PHP
Thinkphp实现短信验证注册功能
Oct 18 PHP
php 输出json及显示json中的中文汉字详解及实例
Nov 09 PHP
PHP 类与构造函数解析
Feb 06 PHP
PHP设计模式之注册树模式分析
Jan 26 PHP
PHP有序表查找之插值查找算法示例
Feb 10 PHP
PHP+Ajax实现的检测用户名功能简单示例
Feb 12 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 max_execution_time执行时间问题
2011/07/17 PHP
PHP 利用Mail_MimeDecode类提取邮件信息示例
2014/01/26 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
laravel开发环境homestead搭建过程详解
2020/07/03 PHP
Javascript Cookie读写删除操作的函数
2010/03/02 Javascript
载入jQuery库的最佳方法详细说明及实现代码
2012/12/28 Javascript
jQuery $.data()方法使用注意细节
2012/12/31 Javascript
12款经典的白富美型—jquery图片轮播插件—前端开发必备
2013/01/08 Javascript
js+css实现的圆角边框TAB选项卡滑动门代码分享(2款)
2015/08/26 Javascript
Spring MVC中Ajax实现二级联动的简单实例
2016/07/06 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
老生常谈javascript变量的命名规范和注释
2016/09/29 Javascript
解决IE11 vue +webpack 项目中数据更新后页面没有刷新的问题
2018/09/25 Javascript
vue使用一些外部插件及样式的配置代码
2019/11/18 Javascript
python ip正则式
2009/05/07 Python
用python分割TXT文件成4K的TXT文件
2009/05/23 Python
Python警察与小偷的实现之一客户端与服务端通信实例
2014/10/09 Python
Python DataFrame.groupby()聚合函数,分组级运算
2018/09/18 Python
从运行效率与开发效率比较Python和C++
2018/12/14 Python
python实现最大子序和(分治+动态规划)
2019/07/05 Python
tensorflow实现测试时读取任意指定的check point的网络参数
2020/01/21 Python
Python re正则表达式元字符分组()用法分享
2020/02/10 Python
python多项式拟合之np.polyfit 和 np.polyld详解
2020/02/18 Python
解决python -m pip install --upgrade pip 升级不成功问题
2020/03/05 Python
anaconda安装pytorch1.7.1和torchvision0.8.2的方法(亲测可用)
2021/02/01 Python
Python基于爬虫实现全网搜索并下载音乐
2021/02/14 Python
中国高端家电购物商城:顺电
2018/03/04 全球购物
德国内衣、泳装和睡衣网上商店:Bigsize Dessous
2018/07/09 全球购物
英国性能汽车零件和发动机配件在线:Maxpeedingrods
2019/11/05 全球购物
杭州信雅达系统.NET工程师面试试题
2015/02/08 面试题
opencv实现图像平移效果
2021/03/24 Python
旅游饭店管理专业自荐书
2014/06/28 职场文书
深入开展党的群众路线教育实践活动心得体会
2014/11/05 职场文书
个人总结格式范文
2015/03/09 职场文书
Python 多线程处理任务实例
2021/11/07 Python