MongoDB是一个基于分布式文件存储的开源NoSQL数据库,主要用于大规模文档存储。下面是一些必须了解的核心概念、命令及其解析:
# 创建/切换数据库
use mydb
# 在当前数据库中创建集合
db.createCollection("mycollection")
# 向集合中插入文档
db.mycollection.insert({name: "Alice", age: 25, address: "123 Street"})
# 插入文档
db.mycollection.insert({name: "Bob", age: 30})
# 查询文档
db.mycollection.find({age: {$gt: 25}})
# 更新文档
db.mycollection.update({name: "Alice"}, {$set: {age: 26}})
# 删除文档
db.mycollection.remove({name: "Bob"})
索引用于提高数据库查询性能。MongoDB中,可以为集合中的一个或多个字段创建索引。
# 为name字段创建索引
db.mycollection.createIndex({name: 1})
MongoDB提供了强大的聚合框架,用于对数据进行各种形式的处理,如分组、过滤、排序等。
# 按age字段分组,并计算每个年龄的人数
db.mycollection.aggregate([{ $group: {_id: "$age", count: {$sum: 1}}}])
定期备份是维护数据库安全的重要手段,MongoDB提供了mongodump
和mongorestore
工具进行备份和恢复。
# 备份数据库
mongodump --db mydb --out /path/to/backup
# 恢复数据库
mongorestore --db mydb /path/to/backup/mydb
在生产环境中,需要对MongoDB进行适当的安全配置,包括网络隔离、认证授权等。
# 创建管理员用户
use admin
db.createUser({user: "admin", pwd: "adminpassword", roles: ["root"]})
# 启用认证
# 编辑mongod.conf,加入 security: authorization: enabled
# 重启MongoDB服务
这些是MongoDB的基本概念和操作,但MongoDB还有很多高级功能和优化技术,例如:
分片是MongoDB中用于处理大规模数据集的一种方法,通过将数据分布在多个服务器上,可以实现横向的扩展。
设置分片:
# 启动配置服务器 (configsvr)
mongod --configsvr --dbpath /path/to/configdb --port 27019
# 启动分片服务器 (shardsvr)
mongod --shardsvr --dbpath /path/to/sharddb --port 27020
# 启动mongos
mongos --configdb configsvr:27019
添加分片:
# 连接mongos
mongo --host mongos-hostname --port 27017
# 添加分片
sh.addShard("shardsvr:27020")
复制集提供数据冗余和高可用性,通过将数据复制到多个服务器,可以在主服务器出现故障时自动切换到备用服务器。
配置复制集:
# 启动MongoDB实例,指定复制集名称
mongod --dbpath /path/to/db --replSet "rs0" --port 27017
# 初始化复制集
mongo --eval "rs.initiate()"
MongoDB 4.0及更高版本支持多文档ACID事务,这使得在一个事务中对多个文档进行更改成为可能。
// 开启一个Session
let session = db.getMongo().startSession()
// 开启一个事务
session.startTransaction()
try {
// 执行事务内的操作
session.getDatabase("mydb").mycollection.insertOne({ name: "Alice" })
session.getDatabase("mydb").mycollection.updateOne({ name: "Bob" }, { $set: { age: 30 } })
// 提交事务
session.commitTransaction()
} catch (error) {
// 出现错误,回滚事务
session.abortTransaction()
throw error
} finally {
// 结束Session
session.endSession()
}
$explain
来分析查询计划。使用mongodump
和mongorestore
工具可以实现数据的备份和恢复,也可以用于数据的迁移。
在服务器故障时,如果配置了复制集,MongoDB可以自动进行故障切换。在数据错误或丢失时,可以使用备份来恢复数据。
使用MongoDB自带的监控工具,如mongostat
和mongotop
,以及第三方监控工具,如Prometheus
和Grafana
,来监控数据库的性能和资源使用情况。定期分析MongoDB的日志,以发现潜在的问题和性能瓶颈。
在实际应用中,需要根据具体的业务需求和系统环境,灵活选择和应用这些技术。