一,环境
thinkphp5.0.24 php 7.2 mongo
mongodb 安装不再缀述,主要讲下tp5如果集成mongodb可以正常的查询,如果不清楚,要花费不少时间去排查。
二,下载think-mongo 1.*版本
直接用composer require topthink/think-mongo=1.*
在tp5框架vendor目录会下生成think-mongo相的 Connection.php Builder.php Query.php
三,配置tp5
return [ // 数据库类型 ‘type‘ => ‘\think\mongo\Connection‘, // Query对象 ‘query‘ => ‘\think\mongo\Query‘, // 数据库连接DSN配置 ‘dsn‘ => ‘‘, ‘hostname‘ => ‘127.0.0.1‘, // 验证数据库 ‘database‘ => ‘admin‘, //连接数据库 ‘db‘ => ‘conf‘, // 数据库用户名 ‘username‘ => ‘sa‘, // 数据库密码 ‘password‘ => ‘123456‘, // 数据库连接端口 ‘hostport‘ => ‘27017‘, // 数据库编码默认采用utf8 ‘charset‘ => ‘utf8‘, // 数据库表前缀 ‘prefix‘ => ‘‘, //是否返回id ‘pk_convert_id‘ => false, // 副本集 ‘is_replica_set‘ => false, ];
如果有多个数据库需要切换,可以在config.php里配置类似如下:
‘MONGO_USER‘ => [ // 数据库类型 ‘type‘ => ‘\think\mongo\Connection‘, // Query类 ‘query‘ => ‘\think\mongo\Query‘, // 数据库连接DSN配置 ‘dsn‘ => ‘‘, // 服务器地址 ‘hostname‘ => ‘127.0.0.1‘, // 验证数据库 ‘database‘ => ‘admin‘, // 数据库名 ‘db‘ => ‘user‘, // 数据库用户名 ‘username‘ => ‘sa‘, // 数据库密码 ‘password‘ => ‘123456‘, // 数据库连接端口 ‘hostport‘ => ‘27017‘, // 数据库连接参数x ‘params‘ => [], // 数据库编码默认采用utf8 ‘charset‘ => ‘utf8mb4‘, // 数据库表前缀 ‘prefix‘ => ‘‘, ‘pk_convert_id‘ => false, ‘debug‘ => false, // 副本集 //‘is_replica_set‘ => true, ],
这样连接的时候用Db::connect(‘MONGO_USER‘)就可以随意的切库了。
三,针对think-mongo的一个底层修改,重要
$this->links[$linkNum] = new Manager($host, $this->config[‘params‘]); if($config[‘db‘]){ //切换数据库 $this->db($config[‘db‘]); }
在Connection.php里一定要加上这段代码,不然一直会查询admin数据库的。