mongodb模糊查询 php7_PHP实战:在php7中MongoDB实现模糊查询的方法详解

《PHP实战:在php7中MongoDB实现模糊查询的方法详解》要点:

本文介绍了PHP实战:在php7中MongoDB实现模糊查询的方法详解,希望对您有用。如果有疑问,可以联系我们。

前言

在实际开发中, 有不少的场景需要使用到模糊查询, MongoDB shell 模糊查询很简单:PHP编程

db.collection.find({'_id': /^5101/})

上面这句就是查询_id以'5101'开始的内容.PHP编程

在老的MogoDB中模糊查询挺简单的,这里简单记录下模糊查询的操作方式:

PHP编程

命令行下:PHP编程

db.letv_logs.find({"ctime":/uname?/i});

php操作PHP编程

$query=array("name"=>new MongoRegex("/.*”.$name.".*/i"));

$db->find($query);

下面主要就讲下新PHP驱动中怎么查询:PHP编程

$query = new \MongoDB\Driver\Query('_id' => ['$regex' => '^5101']);

$this->getManager()->executeQuery($this->dbname . $this->collection, $query);

上面就是新驱动中执行模糊查询, 说实话, 挺吐槽这个新驱动, 相比老的驱动, 这个函数名也太长了吧...都快超过swift的函数名了.而且老驱动上的不少功能都在新驱动上干掉了.虽然提供了一个mongodb php library的类库来操作, 但是这个库里面有60多个文件,有时候比我项目文件还要多,这是闹哪样.这我建议自己去封装一个Driver类来使用.PHP编程

上面吐槽吐的有点跑题了, 除了直接模糊查询, 在和$in或$nin使用的时候, 需要特别注意下:PHP编程

$filter = ['_id' => ['$in' => ['$regex' => '^5101']]];

如果你像上面那么写filter的话, 执行的时候将抛出一个致命错误:PHP编程

PHP Fatal error: Uncaught MongoDB\Driver\Exception\ConnectionException: $in needs an array in filename

这里说$in里面需要提供一个数组, 那么我们把上面的$filter改下, 给它弄个数组过去:PHP编程

$filter = ['_id' => ['$in' => [['$regex' => '^5101']]];

但是不幸的是, 还是无法成功的得到想要的结果:PHP编程

PHP Fatal error: Uncaught MongoDB\Driver\Exception\ConnectionException: cannot nest $ under $in in filename

这里说$in中不能出现$, 那咋办呢? 其实在$in或$nin中要使用模糊匹配, 需要使用\MongoDB\BSON\Regex类的实例:PHP编程

$filter = ['_id' => ['$in' => [new \MongoDB\BSON\Regex('^5101','i')]]];

这次终于得到我们想要的结果了.PHP编程

总结PHP编程

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对维易PHP的支持.PHP编程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值