1. 云栖社区>
  2. PHP教程>
  3. 正文

ThinkPHP支持MongoDb Aggregate方法聚合管道

作者:用户 来源:互联网 时间:2017-12-01 20:37:30

方法管道支持

ThinkPHP支持MongoDb Aggregate方法聚合管道 - 摘要: 本文讲的是ThinkPHP支持MongoDb Aggregate方法聚合管道, ThinkPHP支持MongoDb Aggregate方法聚合管道,有需要的朋友可以参考下。 默认的Thinkphp是不支持aggregate聚合的,在使用Mongodb的时候,难免会出现分组等一些复杂的操作,不然的话操作相对很繁琐。本文

ThinkPHP支持MongoDb Aggregate方法聚合管道,有需要的朋友可以参考下。


默认的Thinkphp是不支持aggregate聚合的,在使用Mongodb的时候,难免会出现分组等一些复杂的操作,不然的话操作相对很繁琐。本文介绍下对Thinkphp中MongoModel.class.php和Mongo.class.php的修改使mongo模型支持管道聚合。1.在ThinkPHP/Library/Think/Model/MongoModel.class.php文件中的group方法之后加入以下代码
/**  * 聚合接口  * @access public  * @return string  */ public function aggregate($pipeline, $option=array()) {$option = $this->_parseOptions($option);return $this->db->aggregate($pipeline, $option); }
2.在ThinkPHP/Library/Think/Db/Driver/Mongo.class.php文件中的group方法之后加入以下代码
//聚合接口 public function aggregate($pipeline,$options=array()){if(isset($options['table']) && $this->_collectionName != $options['table']) {$this->switchCollection($options['table'],'',false);}$this->model  =$options['model'];$this->queryTimes++;N('db_query',1); // 兼容代码if($this->config['debug']) {$this->queryStr=  $this->_dbName.'.'.$this->_collectionName.'.aggregate('.json_encode($pipeline).')';}try{$this->debug(true);$option = array();if(isset($options['allowDiskUse'])) { $option['allowDiskUse'] = $options['allowDiskUse'];}if(isset($options['cursor'])) { $option['cursor'] = $options['cursor'];}if(isset($options['explain'])) { $option['explain'] = $options['explain'];}if(isset($options['maxTimeMS'])) { $option['maxTimeMS'] = $options['maxTimeMS'];}$aggregate = $this->_collection->aggregate($pipeline,$option);$this->debug(false);return $aggregate;} catch (/MongoCursorException $e) {E($e->getMessage());} }
在这两个地方修改后就可以支持了。ThinkPHP版本:3.2.3完整版ThinkPHP连接Mongodb问题发现:1.提示什么多了个[,后来发现是本机PHP版本不够高,不支持框架中的语法,找到位置修改后就行了。2.Mongodb用户和密码问题。创建的用户和密码需要在ThinkPHP配置文件所指定的你需要连接库中,不然连不上。因为连接的时候php会在这个库下的system.users集合中去找用户名和密码。具体做法是在Mongo命令行创建用户的时候,先切换到我们需要的库,然后再创建用户。

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索方法 , 管道 支持 ,以便于您获取更多的相关知识。