当前位置: 首页 > 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事件…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

全面解析各类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…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

Python Einops库:深度学习中的张量操作革命

Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...

day36-多路IO复用

一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解

一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...