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

 2025-01-16  阅读 353  评论 8  点赞 452

摘要:前言 在实际开发中, 有不少的场景需要使用到模糊查询, mongodb shell 模糊查询很简单: db.collection.find({'_id': /^5101/}) 上面这句就是查询_id以'5101'开始的内容。 在老的mogodb中模糊查询挺简单的,这里简单记录下模糊查询的操作方式: 命令行下: db.letv_logs.find({

前言

在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')]]];

这次终于得到我们想要的结果了。

总结

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


标签:phpphp教程

评论列表:

显示更多评论

发表评论:

管理员

承接各种程序开发,外贸网站代运营,外贸网站建设等项目
  • 内容2460
  • 积分67666
  • 金币86666

Copyright © 2024 LS'Blog-保定PHP程序员老宋个人博客 Inc. 保留所有权利。 Powered by LS'blog 3.0.3

页面耗时0.0273秒, 内存占用1.94 MB, 访问数据库29次

冀ICP备19034377号