当前位置: 首页 > 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.lryc.cn/news/575239.html

相关文章:

  • DeepSeek模型接入LangChain流程(详细教程)
  • 永磁同步电机无速度算法--基于同步旋转坐标系锁相环的滑模观测器
  • PYTHON从入门到实践6-字典
  • MCP2518FD发送时有时候多发数据包问题
  • 【预告 大模型应用开发实战专栏 升级】将增加《大模型 Agent 应用实战指南》专题赋能 Agent 开发者
  • OpenGL模板缓冲:实现亮显外轮廓效果
  • C# LINQ语法
  • Python 爬虫入门:从数据爬取到转存 MySQL 数据库
  • Cookie 在 HTTP 中的作用HTTP 中的状态码
  • 北斗导航 | 基于改进奇偶矢量法的CAT I精密进近RAIM算法
  • 半导体芯闻--20250625
  • Linux离线安装jdk-11
  • AudioTrack使用
  • Kylin Linux Advanced Server V10 离线安装 Prometheus + Grafana + node_exporter指南
  • 【网站内容安全检测】之1:获取网站所有链接sitemap数据
  • Sortablejs动态同类型穿插
  • MySQL之视图深度解析
  • 灰度发布怎么保证数据库一致的
  • Windows10中设置多个虚拟IP方法
  • Swagger 在 Spring Boot 中的详细使用指南
  • PDF处理控件Spire.PDF系列教程:Python中快速提取PDF文本、表格、图像及文档信息
  • Python 数据分析与可视化 Day 7 - 可视化整合报告实战
  • 视频中的开放世界目标计数
  • gitbash中执行命令巨慢
  • 淘宝API安全合规指南:避免数据泄露与封禁
  • AI助教来袭:用n8n和Gemini搭建英语作文自动批阅与学情分析系统
  • 【网站内容安全检测】之2:从网站所有URL页面中提取所有外部及内部域名信息
  • request这个包中,get 这个方法里传入的是params ,post这个方法里传入的是data 和 json。这个区别是什么?
  • 每日AI资讯速递 | 2025-06-25
  • 深入理解 Spring 框架的 Bean 管理与 IOC​