CI3连接MongoDB Atlas失败求助:URI解析错误及数据获取方案
CodeIgniter 3 连接 MongoDB Atlas 并实现查询的解决方案
一、先解决 URI 格式错误
你的报错核心是 URI 格式不合法,问题有两处:
- 协议重复+端口冗余:
mongodb+srv://类型的 URI 不需要指定27017端口,且你错误将mongodb://和mongodb+srv://叠加使用了。 - 缺少认证信息:URI 里未包含 Atlas 数据库的用户名和密码。
正确的 Atlas SRV URI 格式应为:
mongodb+srv://<你的用户名>:<你的密码>@cluster0.mdoxuh6.mongodb.net/MyFirstProject?retryWrites=true&w=majority
替换
<你的用户名>和<你的密码>为你在 Atlas 控制台创建的数据库用户凭据;MyFirstProject是目标数据库名,可按需修改。
二、配置 CodeIgniter 3 数据库连接
确认 MongoDB 扩展已安装
执行php -m命令,查看输出中是否有mongodb模块。如果没有,根据你的系统和 PHP 版本安装对应扩展(例如通过pecl install mongodb安装)。修改数据库配置文件
打开application/config/database.php,添加或修改 MongoDB 配置项:$db['mongodb'] = array( 'dsn' => 'mongodb+srv://<你的用户名>:<你的密码>@cluster0.mdoxuh6.mongodb.net/MyFirstProject?retryWrites=true&w=majority', 'hostname' => '', 'username' => '', 'password' => '', 'database' => '', 'dbdriver' => 'mongodb', 'dbprefix' => '', 'pconnect' => FALSE, 'db_debug' => TRUE, 'cache_on' => FALSE, 'cachedir' => '', 'char_set' => 'utf8', 'dbcollat' => 'utf8_general_ci', 'swap_pre' => '', 'encrypt' => FALSE, 'compress' => FALSE, 'stricton' => FALSE, 'failover' => array(), 'save_queries' => TRUE );注意:
dbdriver必须设为mongodb;如果你的 CI3 没有内置 MongoDB 驱动,需通过 Composer 安装适配包(如codeigniter-mongodb),或手动将驱动文件放入application/libraries目录。
三、实现数据查询操作
加载 MongoDB 连接
在控制器或模型中加载配置好的连接:// 控制器中加载 $this->load->database('mongodb', TRUE); // 模型中设置默认连接 class User_model extends CI_Model { public function __construct() { parent::__construct(); $this->db = $this->load->database('mongodb', TRUE); } }查询示例
以查询users集合为例:// 查询所有文档 $query = $this->db->get('users'); $all_users = $query->result(); // 条件查询(年龄大于18的用户) $where = array('age' => array('$gt' => 18)); $query = $this->db->get_where('users', $where); $adult_users = $query->result(); // 打印结果 print_r($adult_users);
四、额外排查要点
- Atlas 白名单设置:确保你的服务器/本地 IP 已添加到 MongoDB Atlas 的 IP 白名单中,否则会被拒绝连接。
- 用户权限:确认 Atlas 数据库用户拥有目标数据库的读写权限。
- 版本兼容性:MongoDB 扩展需与 PHP 版本匹配,建议使用 PHP 7.4 及以上版本(CI3 对该版本支持良好)。
内容的提问来源于stack exchange,提问作者Biju B
相关产品推荐
相关产品推荐

