在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中cookie的作用域
Mar 27 PHP
需要发散思维学习PHP
Jun 29 PHP
php共享内存段示例分享
Jan 20 PHP
使用php清除bom示例
Mar 03 PHP
php通过分类列表产生分类树数组的方法
Apr 20 PHP
php多重接口的实现方法
Jun 20 PHP
详解WordPress开发中的get_post与get_posts函数使用
Jan 04 PHP
9个比较实用的php代码片段
Mar 15 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
Oct 08 PHP
php 实现一个字符串加密解密的函数实例代码
Nov 01 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
Apr 10 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
Aug 06 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常用image图像函数集
2013/06/24 PHP
PHP $_FILES中error返回值详解
2014/01/30 PHP
ThinkPHP模板判断输出Empty标签用法详解
2014/06/30 PHP
学习php设计模式 php实现享元模式(flyweight)
2015/12/07 PHP
PHP获取input输入框中的值去数据库比较显示出来
2016/11/16 PHP
PHP使用PDO 连接与连接管理操作实例分析
2020/04/21 PHP
js异或加解密效果代码
2008/06/25 Javascript
关于javascript 回调函数中变量作用域的讨论
2009/09/11 Javascript
JQueryEasyUI datagrid框架的进阶使用
2013/04/08 Javascript
js控制的遮罩层实例介绍
2013/05/29 Javascript
自己用jQuery写了一个图片的马赛克消失效果
2014/05/04 Javascript
JavaScript针对网页节点的增删改查用法实例
2015/02/02 Javascript
javascript中 try catch用法
2015/08/16 Javascript
JavaScript仿支付宝密码输入框
2015/12/29 Javascript
分享12个非常实用的JavaScript小技巧
2016/05/11 Javascript
Bootstrap树形菜单插件TreeView.js使用方法详解
2016/11/01 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
js中常用的Math方法总结
2017/01/12 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
详解使用VueJS开发项目中的兼容问题
2018/08/02 Javascript
JavaScript数据结构之栈实例用法
2019/01/18 Javascript
使用Phantomjs和Node完成网页的截屏快照的方法
2019/07/16 Javascript
[03:48]DOTA2完美大师赛主赛事第二日精彩集锦
2017/11/24 DOTA
[01:05:07]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第一场2月1日
2021/03/11 DOTA
python遍历 truple list dictionary的几种方法总结
2016/09/11 Python
一些Centos Python 生产环境的部署命令(推荐)
2018/05/07 Python
pytorch permute维度转换方法
2018/12/14 Python
python用for循环求和的方法总结
2019/07/08 Python
Python图像处理模块ndimage用法实例分析
2019/09/05 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
2021/02/01 Python
YSL Beauty加拿大官方商城:圣罗兰美妆加拿大
2017/05/15 全球购物
澳大利亚最受欢迎的美发和美容在线商店:Catwalk
2018/12/12 全球购物
美国肌肉和力量商店:Muscle & Strength
2019/06/22 全球购物
机关领导查摆四风思想汇报
2014/09/13 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书
高三语文教学反思
2016/02/16 职场文书