简介:本文是MongoDB数据库的权威使用手册,涵盖安装部署、核心概念、CRUD操作、索引优化、聚合框架、安全机制及故障排查,适合开发人员与运维人员系统学习。
MongoDB 是一款基于文档的 NoSQL 数据库,采用 BSON(二进制 JSON)格式存储数据,支持灵活的 Schema 设计。其核心特性包括:
适用场景:实时应用、内容管理系统、物联网数据、日志分析等需要灵活 schema 和水平扩展的场景。
# 下载 MongoDB 社区版
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-6.0.5.tgz
# 解压并移动到安装目录
tar -xzvf mongodb-linux-x86_64-6.0.5.tgz
sudo mv mongodb-linux-x86_64-6.0.5 /usr/local/mongodb
# 创建数据目录和日志目录
sudo mkdir -p /data/db
sudo mkdir -p /var/log/mongodb
# 配置环境变量
echo 'export PATH=/usr/local/mongodb/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
mongod --dbpath /data/db --logpath /var/log/mongodb/mongod.log --fork
mongod.conf
并指定 replSetName
,然后通过 rs.initiate()
初始化。操作示例:
// 切换或创建数据库
use mydb
// 创建集合(隐式创建,插入文档时自动生成)
db.createCollection("users")
// 查看所有集合
show collections
db.users.insertOne({
name: "Alice",
age: 28,
email: "alice@example.com",
tags: ["developer", "mongodb"]
})
// 批量插入
db.users.insertMany([
{ name: "Bob", age: 32 },
{ name: "Charlie", age: 25 }
])
// 基础查询
db.users.find({ age: { $gt: 25 } })
// 逻辑运算符
db.users.find({
$and: [{ age: { $lt: 30 } }, { tags: "developer" }]
})
// 投影(只返回指定字段)
db.users.find({}, { name: 1, _id: 0 })
// 替换整个文档
db.users.updateOne({ name: "Alice" }, { $set: { age: 29 } })
// 更新嵌套字段
db.users.updateOne(
{ name: "Alice" },
{ $push: { tags: "noSQL" } }
)
// 删除单个文档
db.users.deleteOne({ name: "Bob" })
// 删除所有匹配文档
db.users.deleteMany({ age: { $lt: 30 } })
索引是提升查询性能的关键。MongoDB 支持单字段索引、复合索引、多键索引等。
创建索引示例:
// 单字段索引
db.users.createIndex({ name: 1 }) // 1 表示升序,-1 表示降序
// 复合索引
db.users.createIndex({ age: 1, name: -1 })
// 唯一索引
db.users.createIndex({ email: 1 }, { unique: true })
// 查看索引
db.users.getIndexes()
索引使用原则:
explain()
分析查询执行计划。聚合框架是 MongoDB 的核心功能之一,用于数据转换和统计分析。其基本结构为管道(Pipeline)形式,每个阶段对输入文档进行操作并输出结果。
$match
:过滤文档。$group
:分组计算。$sort
:排序。$project
:投影字段。$lookup
:关联查询(类似 SQL 的 JOIN)。
db.users.aggregate([
{ $group: {
_id: { $floor: { $divide: ["$age", 10] } }, // 按 10 岁分组
count: { $sum: 1 },
avgAge: { $avg: "$age" }
}},
{ $sort: { "_id": 1 } }
])
MongoDB 支持 SCRAM-SHA-256 认证机制。
创建管理员用户:
use admin
db.createUser({
user: "admin",
pwd: "securePassword",
roles: ["root"]
})
启用认证:
在 mongod.conf
中配置:
security:
authorization: enabled
readWrite
、dbAdmin
)或自定义角色。grantRolesToUser
分配权限。mongostat
和 mongotop
监控,优化索引和查询。备份:
mongodump --host localhost --db mydb --out /backup/mydb
恢复:
mongorestore --host localhost --db mydb /backup/mydb
ObjectId
)或嵌入(Embedded)根据业务需求选择。MongoDB 凭借其灵活的文档模型、强大的扩展能力和丰富的功能,已成为现代应用开发的热门选择。通过掌握本文介绍的安装部署、核心操作、索引优化、聚合框架和安全机制,您可以高效地使用 MongoDB 构建高性能应用。建议结合官方文档和实际场景不断实践,以深入理解其高级特性。