Skip to content

MongoDB 创建数据库

MongoDB 中创建数据库非常简单,不需要显式的创建命令,只需要使用 use 命令切换到不存在的数据库,然后插入数据即可。

创建数据库

基本语法

javascript
use 数据库名

示例

javascript
// 切换到 mydb 数据库(如果不存在则创建)
use mydb

// 查看当前数据库
db
// 输出: mydb

验证数据库创建

javascript
// 插入一条数据,数据库才真正创建
db.users.insertOne({ name: "张三", age: 25 })

// 查看所有数据库
show dbs
// 输出:
// admin   0.000GB
// config  0.000GB
// local   0.000GB
// mydb    0.000GB  ← 新创建的数据库

数据库命名规则

命名规范

  • 不能是空字符串
  • 不能包含空格、.$/\\0(空字符)
  • 应全部小写(推荐)
  • 最多 64 字节
  • 不能与系统保留名称冲突

保留数据库名

  • admin: 权限管理数据库
  • local: 本地数据存储,不复制
  • config: 分片集群配置信息

有效命名示例

javascript
use mydb           // ✓ 有效
use my_database    // ✓ 有效
use db123          // ✓ 有效
use userData       // ✓ 有效(但不推荐大小写混合)

无效命名示例

javascript
use my.db          // ✗ 包含点号
use my$db          // ✗ 包含美元符号
use my db          // ✗ 包含空格
use admin          // ⚠️ 系统保留名(可用但不建议)

查看数据库

列出所有数据库

javascript
show dbs
// 或
show databases

查看当前数据库

javascript
db

获取数据库统计信息

javascript
db.stats()

输出示例:

json
{
  "db": "mydb",
  "collections": 2,
  "views": 0,
  "objects": 5,
  "avgObjSize": 45.2,
  "dataSize": 226,
  "storageSize": 36864,
  "indexes": 2,
  "indexSize": 36864
}

切换数据库

javascript
// 切换到 test 数据库
use test

// 切换到 admin 数据库
use admin

// 切换回 mydb
use mydb

数据库操作示例

完整示例流程

javascript
// 1. 创建/切换到新数据库
use company

// 2. 创建集合并插入数据
db.employees.insertOne({
  name: "张三",
  department: "技术部",
  salary: 15000,
  hireDate: new Date()
})

// 3. 创建另一个集合
db.departments.insertOne({
  name: "技术部",
  manager: "张三",
  location: "3楼"
})

// 4. 查看数据库列表
show dbs

// 5. 查看当前数据库统计
db.stats()

数据库大小限制

理论限制

  • 命名空间文件大小:默认 16MB(可配置)
  • 集合数量:受命名空间限制,约 12,000 个
  • 数据库数量:无硬性限制(受文件系统限制)

实际考虑因素

  • 文件系统限制
  • 硬件资源(磁盘空间、内存)
  • 管理复杂度

多数据库架构设计

按环境分离

myapp_dev      // 开发环境
myapp_test     // 测试环境
myapp_prod     // 生产环境

按功能分离

myapp_users    // 用户数据
myapp_orders   // 订单数据
myapp_logs     // 日志数据

按租户分离(多租户)

tenant_a_data  // 租户A数据
tenant_b_data  // 租户B数据
tenant_c_data  // 租户C数据

最佳实践

1. 命名规范

javascript
// 推荐:小写字母,下划线分隔
use ecommerce_db
use user_service_db

// 不推荐
use EcommerceDB      // 大小写混合
use ecommerce-db     // 使用连字符

2. 文档注释

javascript
// 在数据库中创建说明文档
db.metadata.insertOne({
  description: "用户服务数据库",
  created: new Date(),
  owner: "技术团队",
  purpose: "存储用户信息和认证数据"
})

3. 权限规划

javascript
// 为不同数据库创建独立用户
use admin

db.createUser({
  user: "ecommerce_app",
  pwd: "password",
  roles: [
    { role: "readWrite", db: "ecommerce_db" }
  ]
})

常见问题

Q: 创建了数据库但 show dbs 看不到?

A: 空数据库不会显示,需要插入数据后才可见。

javascript
use newdb
show dbs          // 看不到 newdb

db.test.insertOne({})  // 插入数据
show dbs          // 现在可以看到 newdb

Q: 如何重命名数据库?

A: MongoDB 没有直接重命名命令,需要:

  1. 使用 mongodump 导出
  2. 使用 mongorestore 恢复到新名称
bash
# 导出原数据库
mongodump --db oldname --out /backup/

# 恢复到新数据库
mongorestore --db newname /backup/oldname/

# 删除原数据库
mongosh --eval "db.getSiblingDB('oldname').dropDatabase()"

Q: 数据库创建后如何修改配置?

A: 数据库本身配置较少,主要通过:

  • 集合级别配置
  • 服务器配置文件
  • 运行时参数

总结

MongoDB 创建数据库的特点:

  • 延迟创建:使用 use 命令不会立即创建数据库
  • 自动创建:首次插入数据时自动创建
  • 灵活命名:遵循简单命名规则
  • 轻量级:创建成本低,可按需创建多个数据库

在下一章中,我们将学习 MongoDB 删除数据库