源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

在php7中MongoDB实现模糊查询的方法详解

  • 时间:2021-06-24 08:17 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:在php7中MongoDB实现模糊查询的方法详解
[b]前言[/b] 在实际开发中, 有不少的场景需要使用到模糊查询, MongoDB shell 模糊查询很简单:
db.collection.find({'_id': /^5101/}) 
上面这句就是查询_id以'5101'开始的内容。 在老的MogoDB中模糊查询挺简单的,这里简单记录下模糊查询的操作方式: [b]命令行下:[/b]
db.letv_logs.find({"ctime":/uname?/i});
[b]php操作[/b]
$query=array("name"=>new MongoRegex("/.*”.$name.".*/i"));
$db->find($query);
[b]下面主要就讲下新PHP驱动中怎么查询:[/b]
$query = new \MongoDB\Driver\Query('_id' => ['$regex' => '^5101']);
$this->getManager()->executeQuery($this->dbname . $this->collection, $query);
上面就是新驱动中执行模糊查询, 说实话, 挺吐槽这个新驱动, 相比老的驱动, 这个函数名也太长了吧。。。都快超过swift的函数名了。而且老驱动上的不少功能都在新驱动上干掉了。虽然提供了一个[code]mongodb php library[/code]的类库来操作, 但是这个库里面有60多个文件,有时候比我项目文件还要多,这是闹哪样。这我建议自己去封装一个Driver类来使用。 上面吐槽吐的有点跑题了, 除了直接模糊查询, 在和[code]$in[/code]或[code]$nin[/code]使用的时候, 需要特别注意下:
$filter = ['_id' => ['$in' => ['$regex' => '^5101']]];
如果你像上面那么写filter的话, 执行的时候将抛出一个致命错误:
PHP Fatal error: Uncaught MongoDB\Driver\Exception\ConnectionException: $in needs an array in filename
这里说[code]$in[/code]里面需要提供一个数组, 那么我们把上面的[code]$filter[/code]改下, 给它弄个数组过去:
$filter = ['_id' => ['$in' => [['$regex' => '^5101']]];
但是不幸的是, 还是无法成功的得到想要的结果:
PHP Fatal error: Uncaught MongoDB\Driver\Exception\ConnectionException: cannot nest $ under $in in filename
这里说[code]$in[/code]中不能出现$, 那咋办呢? 其实在[code]$in[/code]或[code]$nin[/code]中要使用模糊匹配, 需要使用[code]\MongoDB\BSON\Regex[/code]类的实例:
$filter = ['_id' => ['$in' => [new \MongoDB\BSON\Regex('^5101','i')]]];
这次终于得到我们想要的结果了。 [b]总结[/b] 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对编程素材网的支持。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部