在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产生动态的影像图
Oct 09 PHP
用php制作简单分页(从数据库读取记录)的方法详解
May 04 PHP
基于php使用memcache存储session的详解
Jun 25 PHP
php多功能图片处理类分享(php图片缩放类)
Mar 14 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
Jun 25 PHP
php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码
Sep 04 PHP
php数组排序usort、uksort与sort函数用法
Nov 17 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
Oct 26 PHP
浅析php-fpm静态和动态执行方式的比较
Nov 09 PHP
php与c 实现按行读取文件实例代码
Jan 03 PHP
PHP中危险的file_put_contents函数详解
Nov 04 PHP
PHP微信开发之微信录音临时转永久存储
Jan 26 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/02 国漫
php 高效率写法 推荐
2010/02/21 PHP
PHP学习笔记之字符串编码的转换和判断
2014/05/22 PHP
php中Socket创建与监听实现方法
2015/01/05 PHP
php使用cookie保存登录用户名的方法
2015/01/26 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
2015/03/19 PHP
javascript 面向对象编程基础:继承
2009/08/21 Javascript
javascript采用数组实现tab菜单切换效果
2012/12/12 Javascript
网页整体变灰白色(兼容各浏览器)实例
2013/04/21 Javascript
jquery 设置元素相对于另一个元素的top值(实例代码)
2013/11/06 Javascript
javascript中的nextSibling使用陷(da)阱(keng)
2014/05/05 Javascript
jquery实现点击label的同时触发文本框点击事件的方法
2015/06/05 Javascript
JavaScript中split与join函数的进阶使用技巧
2016/05/03 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
Bootstrap modal使用及点击外部不消失的解决方法
2016/12/13 Javascript
JScript实现地址选择功能
2017/08/15 Javascript
移动端效果之Swiper详解
2017/10/09 Javascript
vue element-ui table表格滚动加载方法
2018/03/02 Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
2019/12/31 Javascript
仅利用30行Python代码来展示X算法
2015/04/01 Python
用C++封装MySQL的API的教程
2015/05/06 Python
python tensorflow基于cnn实现手写数字识别
2018/01/01 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
python生成n个元素的全组合方法
2018/11/13 Python
python-itchat 统计微信群、好友数量,及原始消息数据的实例
2019/02/21 Python
numpy.random.shuffle打乱顺序函数的实现
2019/09/10 Python
pygame实现打字游戏
2021/02/19 Python
基于python实现坦克大战游戏
2020/10/27 Python
CSS3轻松实现圆角效果
2017/11/09 HTML / CSS
纯css3实现的竖形无限级导航
2014/12/10 HTML / CSS
新电JAVA笔试题目
2014/08/31 面试题
C语言编程题
2015/03/09 面试题
自我反省检讨书
2014/01/23 职场文书
文科生自我鉴定
2014/02/15 职场文书
单位授权委托书范文
2014/08/02 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书