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 都能轻松应对。接下来…...
【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事件…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
Python训练营-Day26-函数专题1:函数定义与参数
题目1:计算圆的面积 任务: 编写一个名为 calculate_circle_area 的函数,该函数接收圆的半径 radius 作为参数,并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求:函数接收一个位置参数 radi…...
