You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CI3连接MongoDB Atlas失败求助:URI解析错误及数据获取方案

CodeIgniter 3 连接 MongoDB Atlas 并实现查询的解决方案

一、先解决 URI 格式错误

你的报错核心是 URI 格式不合法,问题有两处:

  1. 协议重复+端口冗余:mongodb+srv:// 类型的 URI 不需要指定 27017 端口,且你错误将 mongodb:// 和 mongodb+srv:// 叠加使用了。
  2. 缺少认证信息:URI 里未包含 Atlas 数据库的用户名和密码。

正确的 Atlas SRV URI 格式应为:

mongodb+srv://<你的用户名>:<你的密码>@cluster0.mdoxuh6.mongodb.net/MyFirstProject?retryWrites=true&w=majority

替换 <你的用户名> 和 <你的密码> 为你在 Atlas 控制台创建的数据库用户凭据;MyFirstProject 是目标数据库名,可按需修改。

二、配置 CodeIgniter 3 数据库连接

  1. 确认 MongoDB 扩展已安装
    执行 php -m 命令,查看输出中是否有 mongodb 模块。如果没有,根据你的系统和 PHP 版本安装对应扩展(例如通过 pecl install mongodb 安装)。

  2. 修改数据库配置文件
    打开 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 目录。

三、实现数据查询操作

  1. 加载 MongoDB 连接
    在控制器或模型中加载配置好的连接:

    // 控制器中加载
    $this->load->database('mongodb', TRUE);
    
    // 模型中设置默认连接
    class User_model extends CI_Model {
        public function __construct() {
            parent::__construct();
            $this->db = $this->load->database('mongodb', TRUE);
        }
    }
    
  2. 查询示例
    以查询 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 20:55:05