ThinkPHP 6.0 官方不内置 MongoDB 支持,需通过自定义 Connection 和 Query 类适配:先确认安装官方 mongodb 扩展,再实现 MongoConnection 和 MongoQuery 类并注册到 database.php,最后在模型中继承自定义基类并规范 BSON 类型处理与查询语法。
ThinkPHP 6.0 官方不内置 MongoDB 支持,但允许通过自定义数据库驱动方式接入。这不是简单改配置就能跑通的事,核心在于绕过默认 DB 层、直连原生 MongoDB 扩展,并封装适配 ThinkPHP 的 Query/Connection 接口。
必须先确保 PHP 环境装的是官方 mongodb 扩展(不是已废弃的 mongo),且版本兼容 PHP 8.x(2026 年主流环境)。运行以下命令验证:
php -m | grep mongodb —— 有输出才代表扩展加载成功php --ri mongodb —— 查看扩展版本与支持特性(如是否启用 SSL、压缩等)pecl install mongodb 或系统包管理器(如 Ubuntu 的 apt install php-mongodb)安装,并在 php.ini 中启用 extension=mongodb.so
TP6 要求你提供符合框架契约的连接类和查询类。不能直接 new MongoDBClient,而要继承或实现标准接口:
appdriverMongoConnection.php,继承 thinkdbConnection,重写 initConnect() 方法,内部实例化 MongoDBDriverManager 或 MongoDBClient
appdriverMongoQuery.php,继承 thinkdbQuery,覆盖 select()、insert()、update() 等方法,将 ThinkPHP 的链式调用转译为 MongoDB 原生操作(如 find()、insertOne())new MongoDBBSONObjectId($id) 处理 _id,new MongoDBBSONUTCDateTime(strtotime('now') * 1000) 处理时间字段配置文件需明确指向你的自定义类,而非字符串标识:
立即学习“PHP免费学习笔记(深入)”;
config/database.php 的 'connections' 中添加一项:'mongo' => [ 'type' => 'appdriverMongoConnection', 'query' => 'appdriverMongoQuery', 'hostname' => '127.0.0.1', 'database' => 'test', 'hostport' => '27017', 'username' => '', 'password' => '', 'options' => [] ]'default' => 'mongo' 或在模型中显式指定 protected $connection = 'mongo';
@、/)时,务必对用户名/密码做 rawurlencode() 编码,否则连接会被截断TP6 的 Model 默认面向关系型数据库,需针对性调整:
thinkModel,而是继承你自定义的基类(如 appmodelMongoModel),该基类内部绑定你的 MongoQuery
$autoWriteTimestamp 设为 false),或自行处理为 UTCDateTime
protected $pk = '_id';,且读取时需手动转成字符串((string)$doc->_id)才能 JSON 输出where() 直接传数组条件,优先用原生查询语法:$model->whereRaw(['status' => 'active'])->select()(需你在 Query 中实现 whereRaw)