MongoDB从零开始详细教程 核心概念与原理 环境搭建 基础操作
一、核心概念与原理
1. 核心组件
概念 |
作用 |
类比关系型数据库 |
文档(Document) |
数据存储基本单元,采用BSON格式(如JSON) |
表中的一行数据 |
集合(Collection) |
文档的容器,无需固定结构(Schema-less) |
数据表(Table) |
数据库(Database) |
多个集合的命名空间容器 |
数据库(Database) |
2. MongoDB vs 关系型数据库
特性 |
MongoDB |
MySQL |
数据结构 |
灵活(动态Schema) |
固定结构(需预定义字段) |
扩展方式 |
水平扩展(分片集群) |
垂直扩展(升级硬件) |
查询语言 |
类JavaScript语法 |
SQL |
适用场景 |
非结构化数据、快速迭代、高并发读写 |
强事务、复杂关联查询 |
BSON优势:二进制JSON,支持日期、二进制流等类型,存储效率高于JSON。
二、环境搭建(Windows/Linux/CentOS)
1. Windows安装
2. CentOS安装
sudo mkdir -p /data/db
sudo chown -R mongodb:mongodb /data/db
sudo yum install -y mongodb-org
sudo systemctl start mongod
3. 连接验证
mongo
> db.version()
> show dbs
三、基础操作(CRUD)
1. 数据库与集合操作
use testdb
db.createCollection("users")
db.users.drop()
db.dropDatabase()
2. 文档增删改查
db.users.insertOne({name: "Alice", age: 25})
db.users.insertMany([{name: "Bob"}, {name: "Charlie"}])
db.users.find()
db.users.find({age: {$gt: 20}})
db.users.findOne({name: "Alice"})
db.users.updateOne({name: "Alice"}, {$set: {age: 26}})
db.users.updateMany({}, {$inc: {age: 1}})
db.users.deleteOne({name: "Bob"})
db.users.deleteMany({age: {$lt: 18}})
四、高级特性与优化
1. 索引优化
索引类型 |
创建命令 |
适用场景 |
单键索引 |
db.users.createIndex({age: 1}) |
频繁按age查询 |
复合索引 |
db.users.createIndex({name:1, age:-1}) |
多字段排序或条件查询 |
TTL索引 |
db.logs.createIndex({time:1}, {expireAfterSeconds:3600}) |
自动清理过期数据(如日志) |
2. 聚合管道(Aggregation)
db.users.aggregate([
{ $group: {
_id: "$age",
count: {$sum: 1}
}},
{ $sort: {count: -1} }
])
3. 分片集群与副本集
- 副本集:一主多从架构,主节点处理写请求,从节点提供读负载均衡,自动故障转移。
- 分片集群:通过分片键(如user_id)将数据分布到多台机器,解决海量数据存储问题。
五、编程语言集成(Node.js/Python)
1. Node.js操作MongoDB
const { MongoClient } = require('mongodb');
const uri = "mongodb://localhost:27017";
async function run() {
const client = new MongoClient(uri);
await client.connect();
const db = client.db('testdb');
const users = db.collection('users');
await users.insertOne({ name: "Eva", role: "admin" });
const result = await users.find({ role: "admin" }).toArray();
console.log(result);
}
run();
2. Python操作MongoDB(PyMongo)
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017')
db = client['testdb']
users = db['users']
users.insert_many([
{"name": "Tom", "score": 85},
{"name": "Jerry", "score": 92}
])
results = users.find({"score": {"$gt": 90}})
for doc in results:
print(doc)
六、运维与监控
1. 备份与恢复
mongodump --db testdb --out /backup/
mongorestore --db testdb /backup/testdb/
2. 性能监控命令
db.serverStatus()
db.currentOp()
db.stats()
3. 安全配置
security:
authorization: enabled
use admin
db.createUser({
user: "admin",
pwd: "password",
roles: ["root"]
})
学习路径
- 新手阶段:掌握CRUD操作 + 理解BSON文档模型
- 进阶方向:
- 索引设计优化(避免全表扫描)
- 聚合管道处理复杂分析
- 分片集群应对海量数据
- 生产实践:
- 副本集保障高可用
- 编程语言集成(Node.js/Python优先)
官方资源:
- MongoDB中文手册
- MongoDB中文社区
工具推荐:
- 可视化工具:MongoDB Compass
- 性能分析:mongostat、mongotop
按此路径学习,可逐步从入门到精通,应对企业级应用开发与运维需求。