【MongoDB】MongoDB从零开始详细教程 核心概念与原理 环境搭建 基础操作

发布于:2025-06-26 ⋅ 阅读:(16) ⋅ 点赞:(0)

一、核心概念与原理

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安装

# 1. 官网下载MSI安装包(社区版)
# 2. 勾选"Install as Service"(自动注册为系统服务)
# 3. 配置环境变量:添加 `C:\Program Files\MongoDB\Server\7.0\bin` 到PATH
# 4. 启动服务:`net start MongoDB` 或命令行 `mongod --dbpath D:\mongo_data`

2. CentOS安装

# 1. 创建数据目录并授权
sudo mkdir -p /data/db
sudo chown -R mongodb:mongodb /data/db

# 2. 通过YUM安装
sudo yum install -y mongodb-org

# 3. 启动服务
sudo systemctl start mongod

3. 连接验证

mongo  # 进入Shell
> db.version()  # 查看版本
> show dbs      # 显示所有数据库

三、基础操作(CRUD)

1. 数据库与集合操作

use testdb                  // 创建/切换数据库(插入数据后生效)
db.createCollection("users") // 显式创建集合
db.users.drop()              // 删除集合
db.dropDatabase()            // 删除当前数据库(需先use目标库)

2. 文档增删改查

// 插入文档
db.users.insertOne({name: "Alice", age: 25})
db.users.insertMany([{name: "Bob"}, {name: "Charlie"}])

// 查询文档
db.users.find()                          // 查询所有
db.users.find({age: {$gt: 20}})         // 条件查询(age>20)
db.users.findOne({name: "Alice"})        // 查询单条

// 更新文档
db.users.updateOne({name: "Alice"}, {$set: {age: 26}})  // 更新单条
db.users.updateMany({}, {$inc: {age: 1}})               // 所有文档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. 安全配置

# 启用身份验证(在mongod.conf中添加)
security:
  authorization: enabled

# 创建管理员
use admin
db.createUser({
  user: "admin",
  pwd: "password",
  roles: ["root"]
})

学习路径

  1. 新手阶段:掌握CRUD操作 + 理解BSON文档模型
  2. 进阶方向:
    • 索引设计优化(避免全表扫描)
    • 聚合管道处理复杂分析
    • 分片集群应对海量数据
  3. 生产实践:
    • 副本集保障高可用
    • 编程语言集成(Node.js/Python优先)

官方资源:
- MongoDB中文手册
- MongoDB中文社区
工具推荐:
- 可视化工具:MongoDB Compass
- 性能分析:mongostat、mongotop
按此路径学习,可逐步从入门到精通,应对企业级应用开发与运维需求。


网站公告

今日签到

点亮在社区的每一天
去签到