数据库的创建与删除
数据库的创建
在MongoDB中创建数据库不需要显式声明,当首次向不存在的数据库写入数据时会自动创建。使用use
命令切换或创建数据库:
// 连接到MongoDB后
use shopDB
// 执行插入操作后数据库才会真正创建
db.products.insertOne({name: "Laptop", price: 999})
关键特性:
- 数据库名称区分大小写,最大64字符
- 保留数据库:admin, local, config不能直接创建
- 命名限制:不能包含
/\. "$*<>:|?
等特殊字符
查看所有数据库:
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 }表示成功
注意事项:
- 删除操作不可逆
- 需要数据库所在实例的写权限
- 删除后磁盘空间不会立即释放
删除集合的两种方式:
// 方式一
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
下一篇:集合的创建与删除