在MongoDB的实际使用中,无论是本地开发环境搭建还是生产环境部署,都需要先完成数据库的基础配置,比如创建业务数据库、初始化集合结构、建立常用索引、插入默认配置数据等。如果每次都手动执行这些操作,不仅耗时,还容易因为操作遗漏导致环境不一致。而编写MongoDB数据库设置初始化脚本,就能一次性完成所有初始化工作,实现环境配置的标准化。

基于MongoDB Shell的初始化脚本
MongoDB Shell是官方提供的交互式操作工具,我们也可以直接编写.js格式的脚本,通过mongosh命令执行,适合简单的初始化场景。
脚本编写示例
以下是一个完整的MongoDB Shell初始化脚本,实现了创建数据库、集合、索引和插入初始数据的功能:
// 切换到目标数据库,不存在则自动创建
use blog_db;
// 创建用户集合,同时插入一条测试数据
db.createCollection("users");
db.users.insertOne({
username: "admin",
password: "encrypted_pwd_123",
role: "super_admin",
create_time: new Date()
});
// 为用户集合的username字段创建唯一索引
db.users.createIndex({ username: 1 }, { unique: true });
// 创建文章集合,插入一条初始文章
db.createCollection("articles");
db.articles.insertOne({
title: "第一篇测试文章",
content: "这是初始化插入的测试内容",
author_id: ObjectId("000000000000000000000001"),
create_time: new Date()
});
// 为文章集合的author_id字段创建普通索引,提升查询效率
db.articles.createIndex({ author_id: 1 });
print("MongoDB初始化脚本执行完成");执行方法
将上述脚本保存为init_mongo.js,在终端中执行以下命令即可运行:
mongosh --file init_mongo.js
如果需要连接远程MongoDB实例,可以添加连接参数:
mongosh "mongodb://username:password@127.0.0.1:27017" --file init_mongo.js
基于Node.js驱动的初始化脚本
如果项目本身是Node.js技术栈,使用官方MongoDB驱动编写初始化脚本会更方便,还能和项目的配置体系结合,适合复杂的初始化场景。
环境准备
首先安装MongoDB Node.js驱动:
npm install mongodb
脚本编写示例
以下是一个Node.js版本的初始化脚本,支持读取配置文件、处理初始化异常:
const { MongoClient } = require("mongodb");
// 数据库连接配置,实际项目中可以从配置文件读取
const config = {
url: "mongodb://127.0.0.1:27017",
dbName: "blog_db"
};
async function initMongoDB() {
const client = new MongoClient(config.url);
try {
// 连接数据库
await client.connect();
console.log("数据库连接成功");
const db = client.db(config.dbName);
// 初始化用户集合
const usersExist = await db.listCollections({ name: "users" }).hasNext();
if (!usersExist) {
await db.createCollection("users");
console.log("用户集合创建成功");
}
// 插入默认管理员用户
const adminExist = await db.collection("users").findOne({ username: "admin" });
if (!adminExist) {
await db.collection("users").insertOne({
username: "admin",
password: "encrypted_pwd_123",
role: "super_admin",
create_time: new Date()
});
console.log("默认管理员用户插入成功");
}
// 创建用户名字段唯一索引
await db.collection("users").createIndex({ username: 1 }, { unique: true });
console.log("用户集合索引创建成功");
// 初始化文章集合
const articlesExist = await db.listCollections({ name: "articles" }).hasNext();
if (!articlesExist) {
await db.createCollection("articles");
console.log("文章集合创建成功");
}
// 创建文章相关索引
await db.collection("articles").createIndex({ author_id: 1 });
await db.collection("articles").createIndex({ create_time: -1 });
console.log("文章集合索引创建成功");
console.log("MongoDB初始化全部完成");
} catch (err) {
console.error("初始化过程出现错误:", err);
} finally {
// 关闭数据库连接
await client.close();
}
}
// 执行初始化函数
initMongoDB();执行方法
将脚本保存为init_node.js,执行以下命令即可:
node init_node.js
注意事项
- 初始化脚本执行前,建议先检查目标数据库是否已经存在,避免重复创建导致数据覆盖
- 生产环境的脚本不要硬编码密码等敏感信息,建议从环境变量或者配置中心读取
- 如果初始化过程包含大量数据插入,建议添加事务支持,保证初始化的原子性
- 脚本执行完成后,可以输出执行日志,方便排查初始化过程中的问题
根据实际项目的需求选择合适的初始化脚本方式,就能快速完成MongoDB的环境配置工作,提升部署效率。