阿里云主机折上折
  • 微信号
您当前的位置:网站首页 > 数据库的创建与删除

数据库的创建与删除

作者:陈川 阅读数:6401人阅读 分类: MongoDB

数据库的创建

在MongoDB中创建数据库不需要显式声明,当首次向不存在的数据库写入数据时会自动创建。使用use命令切换或创建数据库:

// 连接到MongoDB后
use shopDB
// 执行插入操作后数据库才会真正创建
db.products.insertOne({name: "Laptop", price: 999})

关键特性:

  1. 数据库名称区分大小写,最大64字符
  2. 保留数据库:admin, local, config不能直接创建
  3. 命名限制:不能包含/\. "$*<>:|?等特殊字符

查看所有数据库:

show dbs
// 新创建的数据库需至少有一个集合才会显示

集合的显式创建

虽然插入数据时会自动创建集合,但可以显式定义:

// 创建固定大小的集合(循环队列)
db.createCollection("logs", {
  capped: true,
  size: 100000,
  max: 500
})

// 带验证规则的集合
db.createCollection("employees", {
  validator: {
    $jsonSchema: {
      bsonType: "object",
      required: ["name", "position"],
      properties: {
        name: { bsonType: "string" },
        age: { bsonType: "int", minimum: 18 }
      }
    }
  }
})

数据库的删除

删除数据库需要先切换到目标数据库:

use tempDB
db.dropDatabase()
// 返回{ "ok" : 1 }表示成功

注意事项:

  1. 删除操作不可逆
  2. 需要数据库所在实例的写权限
  3. 删除后磁盘空间不会立即释放

删除集合的两种方式:

// 方式一
db.orders.drop()

// 方式二(带选项)
db.runCommand({
  drop: "orders",
  writeConcern: { w: "majority" }
})

批量操作示例

创建测试数据库的完整示例:

// 创建电商数据库
use ecommerce

// 批量创建集合
const collections = ["users", "products", "orders"]
collections.forEach(col => {
  db.createCollection(col, {
    validator: {
      $jsonSchema: {
        bsonType: "object",
        required: ["_id"],
        properties: {
          _id: { bsonType: "objectId" }
        }
      }
    }
  })
})

// 插入初始数据
db.users.insertMany([
  {_id: ObjectId(), name: "Alice", role: "admin"},
  {_id: ObjectId(), name: "Bob", role: "customer"}
])

// 删除整个数据库的完整流程
use ecommerce
db.dropDatabase()

权限管理相关

创建数据库时的权限控制:

// 创建用户并分配角色
db.createUser({
  user: "shopAdmin",
  pwd: "securePass123",
  roles: [{
    role: "dbOwner",
    db: "shopDB"
  }]
})

// 删除数据库前需要权限验证
use admin
db.auth("adminUser", "adminPass")
use shopDB
db.dropDatabase()

特殊场景处理

处理删除失败的情况:

// 检查是否有活跃连接
db.currentOp().inprog.forEach(op => {
  if(op.ns.startsWith("targetDB.")) {
    printjson(op)
  }
})

// 强制删除(需要admin权限)
use admin
db.runCommand({
  killOp: 12345 // 操作ID
})

创建临时数据库的最佳实践:

function createTempDB(dbName, ttlHours) {
  use admin
  db.runCommand({
    create: dbName,
    temp: true,
    expireAfterSeconds: ttlHours * 3600
  })
  
  // 设置自动清理
  db.adminCommand({
    setParameter: 1,
    temporaryDatabaseExpiryTime: ttlHours * 3600
  })
}

本站部分内容来自互联网,一切版权均归源网站或源作者所有。

如果侵犯了你的权益请来信告知我们删除。邮箱:cc@cccx.cn

前端川

前端川,陈川的代码茶馆🍵,专治各种不服的Bug退散符💻,日常贩卖秃头警告级的开发心得🛠️,附赠一行代码笑十年的摸鱼宝典🐟,偶尔掉落咖啡杯里泡开的像素级浪漫☕。‌