【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.pswp.cn/web/86702.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/86702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GeoTools 结合 OpenLayers 实现属性查询

前言 在GIS开发中,属性查询是非常普遍的操作,这是每一个GISer都要掌握的必备技能。实现高效的数据查询功能可以提升用户体验,完成数据的快速可视化表达。 本篇教程在之前一系列文章的基础上讲解如何将使用GeoTools工具结合OpenLayers实现Post…

vue-27(实践练习:将现有组件重构为使用组合式 API)

实践练习:将现有组件重构为使用组合式 API 理解重构过程 重构是任何开发者的关键技能,尤其是在采用新范式如 Vue.js 中的 Composition API 时。它涉及在不改变外部行为的情况下重新组织现有代码,旨在提高可读性、可维护性和可重用性。在从 Options API 迁移到 Composition…

基于Uniapp+SpringBoot+Vue 的在线商城小程序

开发系统:Windows10 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,jquery,html,vue 角色:用户 商家 管理员 用户菜单:首页:商…

华为云Flexus+DeepSeek征文|利用华为云一键部署的Dify平台构建高效智能电商客服系统实战

目录 前言 1 华为云快速搭建 Dify-LLM 应用平台 1.1 一键部署简介 1.2 设置管理员账号登录dify平台 2 接入 DeepSeek 大模型与 Reranker 模型 2.1 接入自定义 LLM 模型 2.2 设置 Reranker 模型 3 构建电商知识库 3.1 数据源选择 3.2 分段设置与清洗 3.3 处理并完成 …

python应用day07---pyechars模块详解

1.pyecharts安装: pip install pyecharts 2.pyecharts入门: # 1.导入模块 from pyecharts.charts import Line# 2.创建Line对象 line Line() # 添加数据 line.add_xaxis(["中国", "美国", "印度"]) line.add_yaxis("GDP数据", [30…

高档背景色

https://andi.cn/page/622250.html

教学视频画中画播放(PICTURE-IN-PICTURE)效果

视频平台的画中画(PIP)功能通过小窗播放提升用户体验:1)支持多任务处理,如边看教程边操作文档;2)减少应用跳出率,增强用户粘性;3)优化屏幕空间利用&#xff1…

MySQL (一):数据类型,完整性约束和表间关系

在当今数据驱动的时代,数据库作为数据存储与管理的核心工具,其重要性不言而喻。MySQL 作为一款广泛应用的开源数据库,凭借其高性能、高可靠性和丰富的功能,深受开发者喜爱。本文作为 MySQL 系列博客的开篇,将带你深入了…

【软考高项论文】信息系统项目的资源管理

摘要 本文围绕信息系统项目的资源管理展开论述。首先阐述了项目资源管理的基本过程,包括资源规划、估算、获取、配置、监控和释放等关键步骤,并给出资源分解结构示例。接着结合2024年参与管理的某信息系统项目实际情况,详细说明资源管理的具…

阿里云Ubuntu服务器上安装MySQL并配置远程连接

1. 安装MySQL 首先连接到你的Ubuntu服务器,然后执行: # 更新软件包列表 sudo apt update# 安装MySQL服务器 sudo apt install mysql-server# 启动MySQL服务 sudo systemctl start mysql# 设置MySQL开机自启 sudo systemctl enable mysql# 检查MySQL状态…

STM32HAL 旋转编码器教程

配置时钟编码模式读取方法: if(__HAL_TIM_IS_TIM_COUNTING_DOWN(&htim1) 0){count - __HAL_TIM_GET_COUNTER(&htim1);}else{count __HAL_TIM_GET_COUNTER(&htim1);}bsp_dtUInt32_show(count);__HAL_TIM_SET_COUNTER(&htim1, 0); 通过 __HAL_TIM…

激光束修复手机屏任意层不良区域,实现液晶线路激光修复原理

摘要 手机屏结构多层复合,任意层线路不良严重影响显示质量。激光束凭借高能量密度与可调控性,能够穿透不同介质精准作用于目标层。本文基于激光与多层材料相互作用机制,解析激光束对手机屏各层不良区域的修复原理,为全层液晶线路…

【软件开发】架构与架构师

文章目录 一、前言二、关于系统架构1. 保障用户访问速度2. 支持大规模并发请求3. 应对复杂业务逻辑4. 应对海量数据的存储与读写三、关于系统架构师四、关于安全架构1. 产品安全架构2. 安全体系架构五、关于安全架构师一、前言 在系统建设与技术架构实践不断推进的背景下,关于…

Blender速成班-基础篇2

视频教程:【第一章】基础操作_哔哩哔哩_bilibili 目录 编辑模式 1.1侧边属性 挤出选区——E 挤出方式选择——AltE ​编辑 内插面——I 倒角——CtrlB 环切——CtrlR 旋绕 本片继续基于视频教程介绍Blender的一些基础操作 勾选Cavity使物体边线更清晰 编…

对象进阶与扩展

目录 创建对象 Object.create() 原型 原型操作 原型污染 对象属性 属性特征 枚举属性 Object.keys() Object.getOwnPropertyNames() Object.getOwnPropertyDescriptor() O…

理解图像的随机噪声

图像灰度信息很难精确测量,一般情况下测量值总在真实值附近晃动,使用概率模型可以对该随机性建模,大致如下: 1 概率密度函数 1)随机变量 x 的概率密度函数 p(x) 定义为:当 趋近于 0 时,在区间 上…

华为云镜像仓库下载 selenium/standalone-chrome 镜像

你可以使用以下步骤从华为云镜像仓库下载 selenium/standalone-chrome 镜像&#xff1a; 1. 登录华为云镜像仓库&#xff08;如果需要认证&#xff09; bash sudo docker login -u <用户名> -p <密码> swr.cn-north-4.myhuaweicloud.com 如果没有华为云账号&…

Push-T, AloHa, Rlbench三个仿真环境信息

1.Push-T 很好兄弟&#xff0c;你问得很关键&#xff1a;你给我的三段代码其实是一套完整的推理录像 pipeline&#xff0c;它们之间既有独立功能&#xff0c;又有顺序依赖关系。我来帮你分段解释&#xff0c;每段是什么功能、三段之间怎么配合&#xff0c;让你彻底搞明白。 &a…

Linux信号机制:从入门到精通

嘿&#xff0c;小伙伴们&#xff01;今天我要和大家聊一个Linux系统中非常有趣又重要的话题——信号机制。别担心&#xff0c;虽然信号听起来有点高深&#xff0c;但我会用最通俗易懂的语言&#xff0c;配合清晰的图表&#xff0c;带你彻底搞懂这个概念&#xff01; 什么是信号…

Vue3项目引入高德地图【超详细教程】

前言 在 Vue 3 项目中集成高德地图&#xff08;AMap&#xff09;是一个常见的需求。本文将详细介绍如何在 Vue 3 项目中使用高德地图&#xff0c;包括安装配置、基本使用以及一些进阶功能的实现。 一、环境准备 1.1 vue3项目初始化 步骤 1&#xff1a;初始化项目 npm crea…