当前位置: 首页 > news >正文

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

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

  • 一、核心概念与原理
    • 1. 核心组件
    • 2. MongoDB vs 关系型数据库
  • 二、环境搭建(Windows/Linux/CentOS)
    • 1. Windows安装
    • 2. CentOS安装
    • 3. 连接验证
  • 三、基础操作(CRUD)
    • 1. 数据库与集合操作
    • 2. 文档增删改查
  • 四、高级特性与优化
    • 1. 索引优化
    • 2. 聚合管道(Aggregation)
    • 3. 分片集群与副本集
  • 五、编程语言集成(Node.js/Python)
    • 1. Node.js操作MongoDB
    • 2. Python操作MongoDB(PyMongo)
  • 六、运维与监控
    • 1. 备份与恢复
    • 2. 性能监控命令
    • 3. 安全配置
  • 学习路径

一、核心概念与原理

1. 核心组件

概念作用类比关系型数据库
文档(Document)数据存储基本单元,采用BSON格式(如JSON)表中的一行数据
集合(Collection)文档的容器,无需固定结构(Schema-less)数据表(Table)
数据库(Database)多个集合的命名空间容器数据库(Database)

2. MongoDB vs 关系型数据库

特性MongoDBMySQL
数据结构灵活(动态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 MongoClientclient = 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
按此路径学习,可逐步从入门到精通,应对企业级应用开发与运维需求。

http://www.lqws.cn/news/520075.html

相关文章:

  • 使用EasyExcel处理动态表头数据导入
  • AWS WebRTC:通过shell实现多进程启动viewer
  • Object.assign()
  • 获取YARN application 应用列表的几种方法
  • 2025年Java后端最新面试场景题 + 八股文高频面试题
  • Dagster数据管道构建指南:I/O管理与数据库连接实践
  • React Native【实战范例】账号管理(含转换分组列表数据的封装,分组折叠的实现,账号的增删改查,表单校验等)
  • rules写成动态
  • syncthing忘记密码怎么办(Mac版)?
  • 成都芯谷金融中心·文化科技园打造文化科技高地
  • 微服务思想与C++服务化框架
  • 跟着AI学习C#之项目实践Day7
  • sentinel 自定义 dashboard 用户名密码
  • 第⼀个与⼤模型交互的应⽤
  • Swagger 在 Spring Boot 中的详细使用指南
  • thinkphp8之文件上传
  • 用户体验驱动的3D设计:从功能实现到情感共鸣的设计升级
  • 融合聚类与分类的退役锂电智能分选技术:助力新能源汽车产业可持续发展
  • JVM调优实战 Day 6:JVM性能监控工具实战
  • 数据结构 顺序表与链表
  • python的易家宜超市云购物系统
  • webman 利用tcp 做服务端 对接物联网
  • 使用 Spread.net将 Excel 中的文本拆分为多段
  • 注解+AOP+自动配置实现自定义starter
  • Java8 Stream流:Stream流的思想和获取Stream流
  • 深入浅出:RocketMQ与Kafka的双剑合璧,实现高可用与高吞吐
  • 服务器不支持PUT,DELETE 的解决方案
  • python爬虫框架scrapy学习记录
  • 打造属于你的AI智能体,从数据开始 —— 使用 Bright Data MCP+Trae快速构建垂直智能体
  • 量学云讲堂2025朱永海慢牛开启第58期视频课程