在php7中MongoDB实现模糊查询的方法详解
作者:daisy 发布时间:2023-09-04 12:30:00
标签:php7,mongodb,模糊查询
前言
在实际开发中, 有不少的场景需要使用到模糊查询, 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')]]];
这次终于得到我们想要的结果了。
来源:http://ghost.icosplay.cc/2017/04/25/mongodb-zai-php7zhong-shi-xian-mo-hu-cha-xun/
0
投稿
猜你喜欢
- 如: 2000-1-1==> 2000-01-01、2000-01-1==>2000-01-01、2000-1-01==>
- 是的,我们知道:我们可以为border设置它的width,这个border的宽度可以是5px,可是10px,可以是20px,可以是随意数值。
- 最近做了一次口碑网注册流程改造,简单说一下激活邮件的设计上的一些小心得:1、尽量不要用图片,尤其是别把激活链接做成一个点击按钮。2、尽量少的
- 1 , javascript字符集:javascript采用的是Unicode字符集编码。为什么要采用这个编码呢?原因很简单,16位的Uni
- 什么是合并多行字符串(连接字符串)呢,例如: SQL> desc test; Name Type Nullable Default C
- 1)按笔画排序select * from Table order by nlssort(columnName,'NLS_SORT=S
- 在Go语言中,我们可以使用for、append()和copy()进行数组拷贝,对于某些对性能比较敏感且数组拷贝比较多的场景,我们可以会对拷贝
- 假如你目前需要在Microsoft Access数据库中指示不存在数据,可以在“文本”或&l
- 方法一、尽量使用复杂的SQL来代替简单的一堆 SQL.同样的事务,一个复杂的SQL完成的效率高于一堆简单SQL完成的效率。有多个查询时,要善
- 简介Github:https://github.com/spf13/cobraStar:26.5KCobra是一个用Go语言实现的命令行工具
- 您可以将SQL Server 数据库引擎升级到 SQL Server 2008。SQL Server 安装程序只需最少的用户干预就可升级 S
- 简介显示大量已经按类别(不是很多)排序的数据但没有类别分界线,用户很难找到所需要的类别。例如,数据库中只有9个类别(8个不同的类别和1个nu
- 数据库的使用过程中由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置……方法一以下为引用的内容:declare
- 在设计主键的时候往往需要考虑以下几点: 1.无意义性:此处无意义是从用户的角度来定义的。这种无意义在一定程度上也会减少数据库的信息冗余。常常
- 异常的本质导引问题在实际工作中,我们遇到的问题都不是完美的,比如:你写某个模块,用户输入不一定符合你的要求:你的程序要打开某个文件,这个文件
- 代码如下:登陆时记录cookies页面代码 <!--#include file="md5.asp"--&
- 说明和代码如下:<%@ language = vbscript%><% 
- 三天前,你说下面的图是 PS 的,我信。而今天,这的的确确是张截图 -- 是的,这已经 不是梦想,是现实 -- 但实现梦想的不是微软,是 G
- 今天交流会上,分享前端的开发经验,有一条虽然很快带过,但是我倒是印象蛮深刻的,就写点小结来分享一下吧。不知道是标准害了大家还是大家害了标准,
- 1.线性与非线性回归线性回归 Linear Regression:两个变量之间的关系是一次函数关系的—&mdas