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

MongoDB 学习指南与资料分享


MongoDB学习资料

MongoDB学习资料

MongoDB学习资料


在数据爆炸的当下,MongoDB 作为非关系型数据库的佼佼者,以其独特优势在各领域发光发热。无论是海量数据的存储,还是复杂数据结构的处理,MongoDB 都能轻松应对。接下来,让我们一同深入探索 MongoDB 的学习路径,并分享一些实用的学习资料。

学习指南

入门基础

核心概念掌握

MongoDB 基于分布式文件存储,采用文档型数据模型。它将数据以 BSON(Binary JSON)格式存储,与传统关系型数据库的表格形式大相径庭。例如,一个简单的用户信息文档可表示为:

{"name": "李四","age": 28,"email": "lisi@example.com","hobbies": ["reading", "swimming"]
}

这种灵活的数据模型,让开发者无需花费大量精力在复杂的表结构设计与范式化处理上,可根据业务需求自由调整数据结构。

环境搭建

下载安装:前往 MongoDB 官方网站(https://www.mongodb.com/try/download/community),根据操作系统版本下载对应的安装包。Windows 用户按安装向导完成安装,注意安装路径与配置选项,如是否将其安装为系统服务。Linux 和 macOS 用户可通过包管理器安装,以 Ubuntu 为例,在终端执行:

sudo apt-get update
sudo apt-get install -y mongodb-community

启动服务:安装完成后,启动 MongoDB 服务。Windows 用户可在服务管理器中找到 “MongoDB” 服务并启动;Linux 和 macOS 用户在终端执行:

sudo systemctl start mongod

连接数据库:MongoDB 提供 “mongo” 交互式 shell 用于与数据库交互。在命令行输入 “mongo”,即可连接本地 MongoDB 实例,连接成功后会出现命令行提示符,此时便可输入各种 MongoDB 命令进行操作。

基础进阶

数据操作

数据库与集合管理:

创建与选择:使用 “use” 命令创建或选择数据库。例如,要创建或切换到 “my_project_db” 数据库,执行:

use my_project_db

集合操作:集合类似关系型数据库的表,用于存储文档。使用 “db.createCollection ()” 方法创建集合,如创建名为 “products” 的集合:

db.createCollection("products")

创建后,可通过 “db.collectionName” 引用,如 “db.products”。还可对集合进行重命名、删除等操作,如重命名

db.products.renameCollection ('new_products')

删除

db.products.drop ()

文档操作:

插入:“insertOne ()” 插入单个文档,“insertMany ()” 插入多个文档。向 “products” 集合插入一个产品文档:

db.products.insertOne({"product_name": "Laptop","price": 1200,"category": "Electronics"
})

插入多个文档:

db.products.insertMany([{"product_name": "Mouse","price": 20,"category": "Computer Accessories"},{"product_name": "Keyboard","price": 50,"category": "Computer Accessories"}
])

查询:使用 “find ()” 方法查询文档。查询 “products” 集合所有文档:

db.products.find()

查询价格大于 50 的产品:

db.products.find({ "price": { "$gt": 50 } })

更新:“updateOne ()” 更新单个文档,“updateMany ()” 更新多个文档。将 “Laptop” 的价格更新为 1300:

db.products.updateOne({ "product_name": "Laptop" }, { "$set": { "price": 1300 } })

删除:“deleteOne ()” 删除单个文档,“deleteMany ()” 删除多个文档。删除价格小于 30 的产品:

db.products.deleteMany({ "price": { "$lt": 30 } })

高级提升

性能优化

索引优化:索引能极大提升查询性能。使用 “createIndex ()” 方法创建索引,如为 “products” 集合的 “category” 字段创建单字段索引:

db.products.createIndex({ "category": 1 })

除单字段索引,还支持复合索引、多键索引等。例如,为 “products” 集合的 “category” 和 “price” 字段创建复合索引:

db.products.createIndex({ "category": 1, "price": -1 })

创建索引时需根据实际查询场景设计,避免过多索引影响写入性能。
聚合框架:聚合框架用于复杂数据处理与分析,通过 “aggregate ()” 方法及一系列管道操作符实现。例如,统计 “products” 集合中每个类别的产品数量:

db.products.aggregate([{"$group": {"_id": "$category","count": { "$sum": 1 }}}
])

复制集:复制集保障高可用性与数据冗余。由一组 MongoDB 实例组成,一个主节点,多个从节点。主节点处理写入操作,并同步日志到从节点,从节点可分担读取负载。创建复制集需在多个节点启动 MongoDB 实例,并配置为成员,然后在其中一个节点执行初始化命令。例如:

rs.initiate({_id: "my_repl_set",members: [{ _id: 0, host: "node1:27017" },{ _id: 1, host: "node2:27017" },{ _id: 2, host: "node3:27017" }]
})

实战要点

数据建模

依据业务需求与数据特点设计数据结构。以电商项目为例,将商品基本信息、库存、评论等存储在一个文档中,利用嵌套文档与数组功能,减少数据冗余与复杂关联查询。同时,预留扩展空间,方便业务拓展时添加新字段与功能。

性能优化

除创建索引外,优化查询语句,尽量使用覆盖索引减少数据扫描范围。合理设置 MongoDB 的缓存大小、线程池大小等参数,充分利用服务器资源。定期进行碎片整理与性能监控,及时发现并解决性能问题。
数据安全

启用身份验证,设置访问控制列表(ACL)保护数据库。用户需提供用户名和密码连接数据库,并为不同用户分配不同权限,如只读、读写权限等。定期进行数据备份,并将备份数据存储在安全位置,防止数据丢失。

资料分享

书籍推荐

《MongoDB 实战》:本书深入介绍 MongoDB 的核心概念与操作,通过大量示例展示如何在实际项目中使用 MongoDB 进行数据存储、查询、管理等,适合初学者快速入门并掌握基础应用。

《MongoDB 权威指南》:内容全面且深入,涵盖 MongoDB 的架构、高级特性、性能优化、复制集与分片等内容,对有一定基础的开发者进一步提升技能很有帮助。

在线课程

Coursera - MongoDB for Developers:由专业讲师授课,系统讲解 MongoDB 的基础与高级知识,结合实际案例与编程练习,帮助学习者深入理解并掌握 MongoDB 开发技能。

网易云课堂 - MongoDB 从入门到精通:课程内容丰富,从环境搭建开始,逐步深入数据操作、索引、聚合等核心内容,适合不同基础的学习者全面掌握 MongoDB 技术。

优质网站

MongoDB 官方文档:https://docs.mongodb.com/,最权威的学习资料,涵盖从基础概念到高级特性的所有内容,包含详细的操作指南与代码示例,是学习 MongoDB 的首选资料。

Stack Overflow:https://stackoverflow.com/,在 MongoDB 相关问题板块,有大量开发者分享的问题与解决方案,能帮助学习者解决学习和实践中遇到的各种难题。

MongoDB 中文社区:https://www.mongodb.com.cn/,提供丰富的 MongoDB 技术文章、教程、案例分享,还有活跃的社区交流氛围,方便学习者交流学习心得与经验。

相关文章:

MongoDB 学习指南与资料分享

MongoDB学习资料 MongoDB学习资料 MongoDB学习资料 在数据爆炸的当下,MongoDB 作为非关系型数据库的佼佼者,以其独特优势在各领域发光发热。无论是海量数据的存储,还是复杂数据结构的处理,MongoDB 都能轻松应对。接下来&#xf…...

【Azure 架构师学习笔记】- Azure Function (2) --实操1

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Function 】系列。 接上文【Azure 架构师学习笔记】- Azure Function (1) --环境搭建和背景介绍 前言 上一文介绍了环境搭建,接下来就在本地环境下使用一下。 环境准备 这里我下载了最新的VS studio&…...

扫描深度?滤光片和偏振片区别?

扫描深度 https://www.shining3d.cn/chike/kousao/aoralscan-wireless.html 是指扫描仪能够准确捕捉和测量的最大距离范围。这一参数对于不同类型的三维扫描仪和应用场景非常重要,具体含义包括: 扫描范围 定义: 扫描深度通常指从扫描仪到被扫描物体表…...

HJ4 字符串分隔(Java版)

一、试题地址 字符串分隔_牛客题霸_牛客网 二、试题内容 描述 对于给定的由小写字母和数字混合构成的字符串 s ,你需要按每 8 个字符换一行的方式书写它,具体地: 书写前 8 个字符,换行;书写接下来的 88 个字符&am…...

【脑机接口数据处理】matlab读取ns6 NS6 ns5NS5格式脑电数据

文章目录 MATLAB函数openNSx详解:轻松读取NSx文件函数概述下载文件基本用法注意事项示例 结论 MATLAB函数openNSx详解:轻松读取NSx文件 在神经科学和生物医学工程领域,处理神经信号数据是一项常见且重要的任务。NSx文件格式是一种用于存储神…...

用C++实现一个基于模板的观察者设计模式

观察者模式 定义 观察者模式(Observer Pattern)是一种行为型设计模式,用于定义对象间的一对多依赖关系,使得当一个对象状态发生变化时,其所有依赖它的对象都会收到通知并自动更新。 核心概念 角色定义 Subject(被观察者): 持有观察者列表,维护观察者的注册和移除。 …...

【华为路由/交换机的ftp文件操作】

华为路由/交换机的ftp文件操作 PC:10.0.1.1 R1:10.0.1.254 / 10.0.2.254 FTP:10.0.2.1 S1:无配置 在桌面创建FTP-Huawei文件夹,里面创建config/test.txt。 点击上图中的“启动”按钮。 然后ftp到server,…...

微信小程序 实现拼图功能

微信小程序 实现拼图 效果示例功能描述代码示例 效果示例 微信小程序 碎片拼图 功能描述 在微信小程序中,实现一个简单的拼图小游戏。用户需要将四张碎片图片拖动到目标图片的正确位置,具体功能如下: 拖动功能: 用户可以通过手指…...

深度学习项目--基于LSTM的火灾预测研究(pytorch实现)

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 LSTM模型一直是一个很经典的模型,这个模型当然也很复杂,一般需要先学习RNN、GRU模型之后再学,GRU、LSTM的模型讲解将…...

AI时代下 | 通义灵码冲刺备战求职季

AI时代下 | 通义灵码冲刺备战求职季 什么是通义灵码使用智能编程助手备战求职靠谱吗体验心得 AI时代下,备战求职季有了不一样的方法,使用通义灵码冲刺备战求职季,会有什么样的体验? 什么是通义灵码 在开始话题之前,首…...

当comfyui-reactor-node 安装失败urllib.error.HTTPError: HTTP Error 403: Forbidden解决方法

comfyUI 节点comfyui-reactor-node 安装 python install 时 报错 urllib.error.HTTPError: HTTP Error 403: Forbidden 如下: (xxx) xxxxxxx:~/sdb/Q/ComfyUI/custom_nodes/comfyui-reactor-node$ python install.py Traceback (most recent call last): File …...

SSE 实践:用 Vue 和 Spring Boot 实现实时数据传输

前言 大家好,我是雪荷。最近我在灵犀 BI 项目中引入了 SSE 技术,以保证图表的实时渲染,当图表渲染完毕服务端推送消息至浏览器端触发重新渲染。 什么是 SSE? SSE 全称为 Server-Send Events 意思是服务端推送事件。 SSE 相比于 …...

TouchGFX学习笔记(一)

配置请参考链接:TouchGFX超低配置移植教程-CSDN博客 一,显示配置 1.适当增加堆栈大小 2.适当增大缓冲大小 双重缓冲消除了任何撕裂的风险,无论渲染下一帧需要多长时间,因为TfT控制器,例如,总是可以访问最…...

Java算法 二叉树入门 力扣简单题相同的树 翻转二叉树 判断对称二叉树 递归求二叉树的层数

目录 模版 先序遍历 中序遍历 后序遍历 力扣原题 相同的二叉树 力扣原题 翻转二叉树 遍历树的层数 题目 静态变量 核心逻辑 模版 // 二叉树public static class Node{public int value;public Node left;public Node right;public Node(int v) {valuev;}} 先序遍历 …...

如何将 session 共享存储到 redis 中

文章目录 一. 分布式 session 登录1.1 什么是分布式?1.2 Session 共享1.3 为什么服务器 A 登录后,请求发到服务器 B,不认识该用户?1.4 共享存储 二. Session 共享实现Redis三. 测试session共享四. cookie设置4.1 前端4.2 后端 一.…...

vue3学习三

五 计算属性 定义 选项式 export default {data(){return {num:1}},computed:{num1(){this.num1}} } 组合式 import {ref,computed} from vuelet numref(0); //仅读 let num1 computed(()>{return num.value1 }) 计算时依赖的变量数据发生变化,则计算属性…...

彻底理解JVM类加载机制

文章目录 一、类加载器和双亲委派机制1.1、类加载器1.2、双亲委派机制1.3、自定义类加载器1.4、打破双亲委派机制 二、类的加载 图片来源:图灵学院   由上图可知,创建对象,执行其中的方法,在java层面,最重要的有获取…...

【计算机体系结构、微架构性能分析】core 与 uncore 分别是哪一些部分?区分 core 和 uncore

在计算机体系结构中,Core 和 Uncore 是描述处理器内部架构的两个重要概念,尤其在多核处理器中更为常见。 1. Core(核心) Core 指的是处理器中的计算核心,是执行指令和处理数据的基本单元。每个核心都包含独立的执行单…...

鸿蒙打包发布

HarmonyOS应用/元服务发布(打包发布) https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/ide-publish-app-V13?catalogVersionV13 密钥:包含非对称加密中使用的公钥和私钥,存储在密钥库文件中,格式…...

vue2:实现上下两栏布局,可拖拽改变高度

要拖拽改变两栏高度,那么总高度要确定,在拖拽的过程中,实时根据光标位置计算两栏高度,所以: 1、最外层有一个box, 高度是屏幕高度screenHeight; 2、该值在页面挂载时获取初始值(window.innerHeight-100),这里减少100,因为窗口上面有工具栏; 3、监听窗口resize事件…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)​现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...

深度学习水论文:mamba+图像增强

🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...

基于Springboot+Vue的办公管理系统

角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...

django blank 与 null的区别

1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...