在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版(5)
Oct 09 PHP
使用PHPMyAdmin修复论坛数据库的图文方法
Jan 09 PHP
关于svn冲突的解决方法
Jun 21 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
Jul 03 PHP
获取URL文件名后缀
Oct 24 PHP
PHP清除字符串中所有无用标签的方法
Dec 01 PHP
php计算2个日期的差值函数分享
Feb 02 PHP
php获取网站百度快照日期的方法
Jul 29 PHP
php中二维数组排序问题方法详解
Aug 28 PHP
php脚本运行时的超时机制详解
Feb 17 PHP
实现PHP框架系列文章(6)mysql数据库方法
Mar 04 PHP
php安装扩展mysqli的实现步骤及报错解决办法
Sep 23 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
JavaScript创建命名空间的5种写法
2014/06/24 PHP
php导出CSV抽象类实例
2014/09/24 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
JS 建立对象的方法
2007/04/21 Javascript
syntaxhighlighter 使用方法
2007/07/02 Javascript
javascript实现unicode和字符的互相转换
2007/07/18 Javascript
让IE6支持min-width和max-width的方法
2010/06/25 Javascript
获取body标签的两种方法
2011/10/13 Javascript
JS实现随机化快速排序的实例代码
2013/08/01 Javascript
Ext修改GridPanel数据和字体颜色、css属性等
2014/06/13 Javascript
jQuery弹出遮罩层效果完整示例
2016/09/13 Javascript
完美的js div拖拽实例代码
2016/09/24 Javascript
解决angular2 获取到的数据无法实时更新的问题
2018/08/31 Javascript
Element-UI中关于table表格的那些骚操作(小结)
2019/08/15 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
跟老齐学Python之让人欢喜让人忧的迭代
2014/10/02 Python
整理Python最基本的操作字典的方法
2015/04/24 Python
Python实现从URL地址提取文件名的方法
2015/05/15 Python
python迭代dict的key和value的方法
2018/07/06 Python
详解Python 装饰器执行顺序迷思
2018/08/08 Python
python绘制多个曲线的折线图
2020/03/23 Python
Pycharm 实现下一个文件引用另外一个文件的方法
2019/01/17 Python
Django实现文件上传下载功能
2019/10/06 Python
通过python扫描二维码/条形码并打印数据
2019/11/14 Python
wxPython实现画图板
2020/08/27 Python
openCV提取图像中的矩形区域
2020/07/21 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
详解numpy.ndarray.reshape()函数的参数问题
2020/10/13 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
CSS3的Border-radius轻松制作圆角
2012/12/24 HTML / CSS
介绍一下SOA和SOA的基本特征
2016/02/24 面试题
2014年转正工作总结
2014/11/08 职场文书
2014年单位工作总结范文
2014/11/27 职场文书
2015年招商引资工作总结
2015/04/25 职场文书
活动经费申请报告
2015/05/15 职场文书
解决ubuntu安装软件时,status-code=409报错的问题
2022/12/24 Servers