Overview
在本指南中,您可以学习如何创建使用MongoDB作为数据库的Drupal内容管理系统(CMS)。Drupal 是一个用PHP编写的开源 Web CMS,提供内容创作、可组合性和身份验证功能。
为什么使用MongoDB作为 Drupal 站点的数据库?
提供个性化用户体验的网站需要强大的用户身份验证功能。拥有许多经过身份验证的用户的站点在从关系数据库的多个表中检索实体数据时可能会遇到性能问题。MongoDB消除了复杂的表连接,并提高了个性化仪表盘和动态内容源等功能的数据检索速度。
当您使用MongoDB作为站点的数据库时,Drupal 会将实体存储为JSON文档,其中包括所有修订、翻译和字段数据。这种灵活数据结构可减少延迟,并为用户提供数据驱动的个性化体验。
MongoDB提供以下可改进 Drupal 站点的功能:
水平扩展:将负载分布到多个服务器,使数据库可扩展的以适应大型用户群。
集成文件存储:将用户文件直接存储在数据库中,而不是存储在 Web服务器上,从而简化了托管。
全文搜索:利用 MongoDB Search 功能,避免实施单独的搜索解决方案。
AI功能:使用MongoDB Vector Search功能执行向量搜索并集成AI服务。
快速入门教程
在本教程中,您构建一个使用MongoDB存储Drupal 站点数据的 Drupal CMS。您可以创建一个本地托管的 Drupal站点,向该站点添加文章,然后在MongoDB中查看该文章的数据。
提示
本教程使用本地MongoDB副本集和本地托管站点。要查看使用 MongoDB Atlas M10 集群和 AWS EC2 服务器的类似教程,请参阅 如何在 MongoDB 上运行 Drupal DEV 文章。
设置您的项目
按照本节中的步骤安装项目依赖项、部署MongoDB副本集并设立Drupal。
启动MongoDB副本集。
要将MongoDB与 Drupal 结合使用,您必须运行MongoDB副本集。执行以下步骤来准备和启动本地三节点副本集:
增加
ulimit值以解决系统资源限制问题。Drupal 可在短时间内创建多个文件和索引。从终端运行以下命令,将
ulimit设立为64000,防止副本集崩溃:ulimit -n 64000 部署副本集。
增加
ulimit后,请按照部署用于测试和开发的自管理副本集教程中的说明来部署和初始化副本集。确保您的副本集名为rs0,并且有三个节点在端口27017、27018和27019上运行。
创建数据库用户。
提示
使用PHP驱动程序
如果您更愿意使用MongoDB PHP驱动程序而不是 mongosh 创建数据库用户,请将 createUser 命令传递给 MongoDB\Database::command() 方法。要学习;了解更多信息,请参阅驱动程序文档中的运行数据库命令。
通过执行以下步骤,创建具有 Drupal数据库所需权限的用户。
从终端运行以下命令,连接到
mongosh中的副本集:mongosh "mongodb://localhost:27017,localhost:27018,localhost:27019/?replicaSet=rs0" 在
mongoshShell中,运行以下命令以进入admin数据库:use admin 然后,从Shell运行以下命令以创建用户:
db.createUser({ user: "<database username>", pwd: "<database user password>", roles: [ { role: "readWrite", db: "drupal" }, { role: "dbAdmin", db: "drupal" } ] }) 将
<database username>和<database user password>替换为您的首选凭证。保存这些值以在将来的步骤中使用。
配置MongoDB集成
安装 Drupal 后,请按照本节中的步骤操作,让您的应用程序能够与MongoDB配合使用。
配置 Drupal 站点
按照本节中的步骤,使用 Drupal 配置向导完成 Drupal 安装。
完成 Web 安装。
在 Web 浏览器中打开 http://localhost:8080 以启动 Drupal 安装向导。然后,通过选择以下响应来配置您的项目。
提示
如果您的站点显示有关已弃用的非规范 (boolean) 转换的错误消息,请在项目的 DocParser.php文件中找到以下行:
$this->ignoreNotImportedAnnotations = (boolean) $bool;
将此行替换为以下代码:
$this->ignoreNotImportedAnnotations = (bool) $bool;
在“选择语言”页面上,选择“英语”,然后单击“保存并继续”。
在“选择配置文件”页面上,保持选择“标准”,然后单击“保存并继续”。
在 设置数据库 页面上,选择 MongoDB 作为数据库类型,并提供以下信息:
数据库名称:
drupal数据库用户名:您在上一个步骤中使用
createUser命令配置的数据库用户名数据库密码:您在上一个步骤中使用
createUser命令配置的数据库密码SRV 连接格式:保持未选中状态
数据库副本集:
rs0托管 #1:
localhost,端口27017托管 #2:
localhost,端口27018托管 #3:
localhost,端口27019
单击保存并继续。
Drupal 安装所需的模块。这可能需要几分钟时间。
在“配置站点”页面上,提供以下信息:
站点名称:输入
Drupal on MongoDB。站点电子邮件地址:输入任何电子邮件地址。您可以使用不存在的解决。
用户名:选择管理员用户名。
密码:选择一个强密码。
接收电子邮件通知:取消选中此框。
单击保存并继续。
创建和查看内容
完成安装后,请按照本节中的步骤创建内容并将其数据存储在MongoDB中。
查看 Drupal 主页。
安装完成后,您的站点将重定向到 Drupal 主页。您的站点类似于下图:

提示
站点样式
如果您的 Drupal 站点显示没有任何样式的纯 HTML,您可能必须禁用 CSS 和 JavaScript 聚合。要禁用聚合,请在浏览器中访问 http://localhost:8080/admin/config/development/performance 并取消选中 Aggregate CSS files 和 Aggregate JavaScript files 复选框。
在MongoDB中查看数据。
提示
使用PHP驱动程序
如果您更愿意使用PHP驱动程序而不是 mongosh 来查看集合和内容数据,请使用 MongoDB\Database::listCollections() 和 MongoDB\Collection::find() 方法。要学习;了解详情,请参阅以下PHP驱动程序文档:
要验证您的内容是否存储在MongoDB中,请执行以下步骤:
打开新的终端窗口并连接到
mongosh中的MongoDB副本集。从终端运行以下命令:
mongosh "mongodb://localhost:27017,localhost:27018,localhost:27019/?replicaSet=rs0" 进入
drupal数据库并查看集合。在
mongosh终端中运行以下命令:use drupal show collections Drupal 会创建多个集合来存储不同类型的内容,其中包括:
node:存储内容节点users:存储用户帐户config:存储配置数据
查看您的文章数据。
要查看有关文章的信息,请在
mongosh终端中运行以下命令:db.node.find().pretty() [ { _id: ObjectId('...'), nid: 1, vid: 1, type: 'article', uuid: '...', langcode: 'en', node_all_revisions: [ { ... } ], node_current_revision: [ { ... } ], node_latest_revision: [ { ... title: 'Welcome to My Drupal Site', created: ..., changed: ..., promote: true, sticky: false, default_langcode: true, revision_default: true, revision_translation_affected: true, node_latest_revision__body: [ { bundle: 'article', deleted: false, langcode: 'en', entity_id: 1, revision_id: 1, delta: 0, body_value: '<p>This is my first article on Drupal with MongoDB!<br>All content is stored as JSON documents in MongoDB.</p>', body_summary: '', body_format: 'basic_html' } ], node_latest_revision__comment: [ { bundle: 'article', deleted: false, langcode: 'en', comment_status: 2, entity_id: 1, revision_id: 1, delta: 0 } ] } ] } ] 此命令会返回一个JSON 文档,其中包含文章文本和元数据。
恭喜您完成 Drupal 快速入门教程!
完成这些步骤后,您就拥有了一个 Drupal CMS,它可以连接到本地 MongoDB 副本集并将内容存储为 JSON 文档。
其他资源
要学习有关 Drupal 和 MongoDB 的更多信息,请查看以下资源:
如何在 MongoDB 上运行 Drupal DEV 教程,包含完整的生产配置
Drupal 文档
