MongoDB 新手笔记
MongoDB 新手笔记
1. MongoDB
1.1 概述
MongoDB 是一种 文档型数据库(NoSQL),数据以类似 JSON 的 BSON 格式存储,适合处理非结构化或半结构化数据。
- 对比 MySQL:
- MySQL 是关系型数据库,数据以表格形式存储(行和列)。
- MongoDB 以集合(Collection)和文档(Document)形式存储数据,更灵活。
1.2 特点
- 灵活模式:字段可动态添加,无需预定义表结构。
- 高性能:支持索引、内存映射文件,读写速度快。
- 水平扩展:通过分片(Sharding)实现数据分布式存储。
1.3 体系结构
- 数据库(Database) → 类似 MySQL 的数据库。
- 集合(Collection) → 类似 MySQL 的表。
- 文档(Document) → 类似 MySQL 的一行记录,但以 BSON 格式存储。
2. 安装与启动
2.1 安装
从官网下载安装包,按操作系统步骤安装。
-
Linux 示例:
sudo apt-get install mongodb
2.2 启动
2.2.1 创建数据目录
mkdir -p /data/db # 默认数据存储路径
2.2.2 编写启动脚本
mongod --dbpath=/data/db # 启动 MongoDB 服务
2.3 连接
使用 MongoDB Shell 连接:
mongo # 默认连接本地服务
3. 基本操作
3.1 选择或创建数据库
use mydb // 切换到 mydb,若不存在则自动创建
3.2 新增
向集合插入文档(类似 MySQL 的 INSERT):(对当前数据库操作统一使用db,而不是当前的数据库名)
db.users.insertOne({ name: "张三", age: 25 }) // 插入单条
db.users.insertMany([{ name: "李四" }, { name: "王五" }]) // 插入多条
3.3 查询
3.3.1 查询全部文档(类似 SELECT *)
db.users.find()
3.3.2 条件查询(类似 WHERE)
db.users.find({ age: 25 }) // 查询 age=25 的文档
3.3.3 查询第一条(类似 LIMIT 1)
db.users.findOne()
3.4 更新(类似 UPDATE)
db.users.updateOne({ name: "张三" }, // 条件{ $set: { age: 30 } } // 更新操作
)
3.5 删除
3.5.1 删除文档(类似 DELETE)
db.users.deleteOne({ name: "张三" })
3.5.2 删除集合(类似 DROP TABLE)
db.users.drop()
3.5.3 删除数据库
db.dropDatabase()
4. 高级查询
4.1 准备数据
db.products.insertMany([{ name: "手机", price: 3000, stock: 100 },{ name: "电脑", price: 8000, stock: null },{ name: "耳机", price: 200 }
])
4.2 模糊查询(类似 LIKE)
db.products.find({ name: /手/ }) // 正则表达式匹配
4.3 null 值处理
db.products.find({ stock: null }) // 查询 stock 为 null 或不存在
4.4 比较运算(如 >, <)
db.products.find({ price: { $gt: 2000 } }) // price > 2000
4.5 判断属性是否存在
db.products.find({ stock: { $exists: true } }) // 查询包含 stock 字段的文档
4.6 包含与不包含(类似 IN)
db.products.find({ name: { $in: ["手机", "耳机"] } }) // 包含指定值
4.7 统计记录数(类似 COUNT)
db.products.countDocuments({ price: { $gt: 2000 } })
4.8 条件连接(AND/OR)
db.products.find({$and: [{ price: { $gt: 1000 } },{ price: { $lt: 5000 } }]
})
// g:great
// l:less
总结
- MongoDB vs MySQL:
- 数据模型:文档 vs 表格。
- 查询语法:JSON 式操作 vs SQL 语句。
- 扩展性:水平扩展 vs 垂直扩展。
- 核心操作:
- 增删改查通过
insert
、delete
、update
、find
实现。 - 高级查询支持正则、比较运算符、逻辑连接等。
- 增删改查通过
- 适用场景:
- MongoDB:大数据量、高并发、灵活模式需求。
- MySQL:事务强一致性、复杂关联查询。
对比项 | MongoDB | MySQL |
---|---|---|
数据库类型 | 文档型数据库(NoSQL) | 关系型数据库(SQL) |
数据模型 | 以 BSON(类似 JSON)格式存储文档 | 以表格(行和列)形式存储数据 |
术语对比 | ||
- 数据库 | Database | Database |
- 表/集合 | Collection | Table |
- 行 | Document(文档,BSON 格式) | Row(行) |
- 列 | Field(字段) | Column(列) |
- 主键 | _id (自动生成,可自定义) | PRIMARY KEY (需显式定义) |
查询语法 | ||
- 查询数据 | db.collection.find({条件}) | SELECT * FROM table WHERE 条件 |
- 插入数据 | db.collection.insertOne({文档}) | INSERT INTO table (列) VALUES (值) |
- 更新数据 | db.collection.updateOne({条件}, {$set: {字段: 值}}) | UPDATE table SET 列=值 WHERE 条件 |
- 删除数据 | db.collection.deleteOne({条件}) | DELETE FROM table WHERE 条件 |
- 条件查询 | { age: { $gt: 20 } } (使用操作符如 $gt , $lt ) | WHERE age > 20 |
- 模糊查询 | db.collection.find({ name: /正则表达式/ }) | WHERE name LIKE '%关键字%' |
事务支持 | 4.0+ 版本支持多文档事务(默认需手动配置) | 原生支持 ACID 事务(如 BEGIN; COMMIT; ROLLBACK; ) |
关联查询 | 不支持 JOIN ,需通过嵌入文档或应用层代码实现 | 支持 JOIN (如 INNER JOIN , LEFT JOIN ) |
索引机制 | 支持单字段、复合、地理空间、文本索引等 | 支持 B-Tree、哈希、全文索引等 |
扩展性 | 水平扩展(分片集群) | 垂直扩展(提升硬件性能) |
数据模式 | 动态模式(Schema-less),字段可灵活增减 | 静态模式(Schema),需预先定义表结构 |
性能特点 | 适合高并发读写、海量非结构化数据 | 适合复杂查询、事务密集型场景 |
存储引擎 | WiredTiger(默认,支持压缩和加密) | InnoDB(默认,支持事务和行级锁) |
适用场景 | 日志系统、实时分析、内容管理、物联网(IoT) | 金融系统、ERP、CRM 等需要强一致性和复杂事务的场景 |
典型操作符对比 | ||
- 等于 | { age: 25 } | WHERE age = 25 |
- 包含 | { tags: { $in: ["A", "B"] } } | WHERE tag IN ("A", "B") |
- 逻辑与/或 | $and: [条件1, 条件2] / $or: [条件1, 条件2] | WHERE 条件1 AND 条件2 / WHERE 条件1 OR 条件2 |
- 统计记录数 | db.collection.countDocuments({条件}) | SELECT COUNT(*) FROM table WHERE 条件 |
数据一致性 | 最终一致性(分布式场景) | 强一致性(单机或主从复制) |
典型缺点 | 不支持复杂关联查询,事务实现较复杂 | 扩展性受限,处理非结构化数据效率低 |
总结
- 术语差异:MongoDB 的“文档”对应 MySQL 的“行”,“集合”对应“表”,“字段”对应“列”。
- 语法差异:
- MongoDB 使用 JSON 风格的查询语法(如
find({条件})
),而 MySQL 使用标准 SQL 语句。 - MongoDB 通过操作符(如
$gt
,$in
)实现复杂条件,MySQL 直接使用运算符(如>
,IN
)。
- MongoDB 使用 JSON 风格的查询语法(如
- 核心特性:
- MongoDB 灵活、易扩展,适合非结构化数据;
- MySQL 强事务、强一致性,适合结构化数据和复杂查询。
- 选择建议:
- 用 MongoDB:需要快速迭代、处理海量数据或半结构化数据(如日志、用户行为)。
- 用 MySQL:需要强事务支持、复杂关联查询(如金融系统)。
重点口诀:灵活用 Mongo,事务用 MySQL;文档即 JSON,查询靠 BSON!
相关文章:
MongoDB 新手笔记
MongoDB 新手笔记 1. MongoDB 1.1 概述 MongoDB 是一种 文档型数据库(NoSQL),数据以类似 JSON 的 BSON 格式存储,适合处理非结构化或半结构化数据。 对比 MySQL: MySQL 是关系型数据库,数据以表格形式存…...
Pytorch查看神经网络结构和参数量
基本方法 print(model) print(type(model))# 模型参数 numEl_list [p.numel() for p in model.parameters()] total_params_mb sum(numEl_list) / 1e6print(fTotal parameters: {total_params_mb:.2f} MB) # sum(numEl_list), numEl_list print(sum(numEl_list)) print(numE…...
Pytorch Dataset问题解决:数据集读取报错DatasetGenerationError或OSError
问题描述 在huggingface上下载很大的数据集,用多个parquet文件的格式下载到本地。使用load_dataset加载的时候,进度条加载到一半会报错DatasetGenerationError: An error occurred while generating the dataset;如果加载为IterableDataset&…...
学习OpenCV C++版
OpenCV C 1 数据载入、显示与保存1.1 概念1.2 Mat 类构造与赋值1.3 Mat 类的赋值1.4 Mat 类支持的运算1.5 图像的读取与显示1.6 视频加载与摄像头调用1.7 数据保存 参考:《OpenCV4快速入门》作者冯 振 郭延宁 吕跃勇 1 数据载入、显示与保存 1.1 概念 Mat 类 : Ma…...
特权FPGA之PS/2键盘解码
0 故事背景 见过这种接口的朋友们,大概都已经成家立业了吧。不过今天我们不讨论这种接口的历史,只讲讲这种接口的设计。(如果还没有成家的朋友也别生气,做自己想做的事情就对了!) 1 时序分析 数据帧格式如图…...
SpringBoot 接口限流Lua脚本接合Redis 服务熔断 自定义注解 接口保护
介绍 Spring Boot 接口限流是防止接口被频繁请求而导致服务器负载过重或服务崩溃的一种策略。通过限流,我们可以控制单位时间内允许的请求次数,确保系统的稳定性。限流可以帮助防止恶意请求、保护系统资源,并优化 API 的可用性,避…...
FPAG_BUFFER学习
在FPGA设计中,缓冲器(Buffer)是信号传输和管理的核心组件,用于处理输入/输出信号、时钟分配以及信号完整性。以下是FPGA中常见缓冲器的详细介绍,分类说明其功能、应用场景和设计注意事项: --- ### **1. 输…...
《认知觉醒》下篇·第六章第一节“清晰:一个观念,重构你的行动力” 总结
《认知觉醒》下篇第六章第一节“清晰:一个观念,重构你的行动力”的核心内容总结: 1. 清晰的力量:行动力的第一性原理 定义 清晰是对目标、路径和结果的明确认知,是破除拖延与内耗的核心前提。 模糊的代价: …...
idea手动创建resources文件夹
有时maven没有构建成功可能造成,resources文件夹不创建的现象 此时我们可以手动创建 手动创建...
Scala相关知识学习总结6
1、集合计算高级函数说明 - 过滤:遍历集合,提取满足特定条件的元素组成新集合。 - 转化/映射(map):将集合里的每个元素应用到指定函数进行转换。 - 扁平化:文档未详细阐述其具体含义和操作。 - 扁平化映射&…...
IDEA 调用 Generate 生成 Getter/Setter 快捷键
快捷键不会用? 快捷键:AltInsert 全选键:CtrlA IDEA 调用 Generate 生成 Getter/Setter 快捷键 - 爱吃西瓜的番茄酱 - 博客园...
【SpringCloud】从入门到精通(下)
网关与路由 什么是网关?顾明思议,网关就是网络的关口。数据在网络间传输,从一个网络传输到另一网络时就需要经过网关来做数据的路由和转发以及数据安全的校验。 现在前端不能请求各个微服务地址,只能去请求网关 网关可以做安全控…...
深入探索 C++23:特性测试与编译器支持
文章目录 一、C23 新特性概览(一)语言特性(二)标准库特性 二、特性测试程序三、主流编译器支持情况(一)GCC(二)Clang(三)MSVC 四、开发者建议(一&…...
Electron 应用太重?试试 PakePlus 轻装上阵
Electron 作为将 Web 技术带入桌面应用领域的先驱框架,让无数开发者能够使用熟悉的 HTML、CSS 和 JavaScript 构建跨平台应用。然而,随着应用规模的扩大,Electron 应用的性能问题逐渐显现——内存占用高、启动速度慢、安装包体积庞大…...
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接 原因描述 项目中有使用到 SQL Server 数据库, 在启动项目时, 出现报错信息: 【驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version…...
Java 设计模式:原型模式详解
Java 设计模式:原型模式详解 原型模式(Prototype Pattern)是一种创建型设计模式,它通过复制现有对象来创建新对象,而无需依赖其具体类。这种模式特别适合创建复杂对象或需要频繁创建相似对象的场景。本文将详细介绍原…...
NLP高频面试题(三十七)——大模型训练和推理的显存估计
在训练和推理大型语言模型时,显存(GPU 内存)的需求是一个关键考虑因素。准确估计这些需求有助于选择合适的硬件配置,确保模型高效运行。 推理阶段的显存需求 在推理过程中,显存主要用于存储模型权重和中间激活值。模型权重的显存需求可以通过以下公式估算: 模型权重…...
PHP 阿里云oss 使用指南
1.介绍 把图片放到阿里云上的空间上,可以使用cdn加速。 可以在程序里直接调用 要使用阿里云 oss sdk ,请先到阿里云下载 或用 copmposer 安装 相关链接: 安装OSS PHP SDK_对象存储(OSS)-阿里云帮助中心 composer require aliyuncs/oss…...
leetcode_面试题 02.07. 链表相交_java
面试题 02.07. 链表相交https://leetcode.cn/problems/intersection-of-two-linked-lists-lcci/ 1、题目 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。 图示两个链表在节点 c…...
LeetCode 3375.使数组的值全部为 K 的最少操作次数:O(1)空间——排序+一次遍历
【LetMeFly】3375.使数组的值全部为 K 的最少操作次数:O(1)空间——排序一次遍历 力扣题目链接:https://leetcode.cn/problems/minimum-operations-to-make-array-values-equal-to-k/ 给你一个整数数组 nums 和一个整数 k 。 如果一个数组中所有 严格…...
紫光展锐5G SoC T8300:影像升级,「定格」美好世界
影像能力已成为当今衡量智能手机性能的重要标尺之一。随着消费者对手机摄影需求日益提升,手机厂商纷纷在影像硬件和算法上展开激烈竞争,力求为用户带来更加出色的拍摄体验。 紫光展锐专为全球主流用户打造的畅享影音和游戏体验的5G SoC——T8300&#x…...
java基础 关键字static
static static使用简介static结合类的生命周期1.加载2.链接(1) 验证(Verification)(2) 准备(Preparation)(3) 解析(Resolution) 3. 初始化4.使用5.卸载总结 staic作用总结静态变量静态代码块静态方法静态内…...
大数据学习(105)-大数据组件分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一…...
Spark运行
一文读懂Spark:从核心概念到实战编程 在大数据处理领域,Spark凭借其高效的计算能力和灵活的架构脱颖而出。今天,就来和大家深入聊聊Spark,帮助初学者快速入门。Spark采用经典的master - slave结构。Driver如同master,…...
在macOS的docker中如何安装及运行ROS2
1、macOS环境及版本 2、docker for macos版本 3、拉取ROS2镜像 docker pull ros:iron 4、查看容器 docker images 5、启动 ROS2 容器 docker run -it --rm ros:iron -it :以交互模式运行容器。 --rm :退出时自动删除容器(测试时推荐&am…...
FFmpeg安装和使用
1. 安装与环境配置 Windows # 方法1:官网下载预编译二进制包 https://ffmpeg.org/download.html#build-windows 解压后添加bin目录到系统PATH# 方法2:通过Chocolatey安装 choco install ffmpegmacOS # 使用Homebrew安装 brew install ffmpegLinux # …...
基于多模态大模型的ATM全周期诊疗技术方案
基于多模态大模型的ATM全周期诊疗技术方案 1. 数据预处理模块 算法1:多模态数据融合伪代码 def multimodal_fusion(data_dict):# 输入:包含MRI、EEG、实验室指标的字典# 输出:对齐后的张量序列# 模态对齐aligned_data = temporal_alignment(data_dict,sampling_rate...
写时复制Copy-on-Write(COW)
简单理解写时复制 读的时候,直接访问原对象。 写的时候,对复制原对象,对副本进行写操作,最后将副本替换原对象。 写时复制多用于读多写少的场景,因为写操作是用悲观锁进行的,如果写的场景多,…...
S7-1200 PLC热电偶和热电阻模拟量模块
热电偶和热电阻模拟量模块 S7-1200 PLC有专用用于对温度进行采集的热电偶模块SM1231 TC和SM 1231RTD。热电偶模块有4AI和8AI两种,下面以SM1231 TC 4AI为例看一下接线图。 该模块一共有4个通道,每个通道有两个接线端子,比如0,0-。…...
ffmpeg函数简介(封装格式相关)
文章目录 🌟 前置说明:FFmpeg 中 AVFormatContext 是什么?🧩 1. avformat_alloc_context功能:场景: 🧩 2. avformat_open_input功能:说明:返回值: ǹ…...
操作数组的工具类
Arrays 它里面的每一个方法基本上都是static静态修饰的,如果想要调用里面的方法,不需要创建对象,直接用类名.就可以了 操作数组的工具类 方法: public static String toString(数组) 把数组拼接成…...
小刚说C语言刷题——第19讲 循环之continue和break
在循环中,当我们得到想要的答案时,这时我们可能要提前结束循环,这个时候我们就会用到break。而我们有时需要结束某一次循环时,我们可以用continue。 1.break语句 (1)在循环中想要提前终止循环,要用break。 (2)语法格…...
FairMOT复现过程中cython_bbox库问题
cython_bbox库就该这么安装_cython-bbox库就应该-CSDN博客...
记录学习的第二十四天
还是每日一题。 题解很巧,我根本想不到。 class Solution { public: int minOperations(vector<int>& nums, int k) { int count; int mnnums[0]; //接下来查找nums数组中最小值 for(int i1;i<nums.size();i) { if(nums[i]<mn) { mnnums[i]; } } …...
Kubernetes 入门篇之网络插件 calico 部署与安装
在运行kubeadm init 和 join 命令部署好master和node节点后,kubectl get nodes 看到节点都是NotReady状态,这是因为没有安装CNI网络插件。 kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master Not…...
HTTP 压力测试工具autocannon(AI)
简介 autocannon 是一款基于 Node.js 的高性能 HTTP 压力测试工具,适用于评估 Web 服务的并发处理能力和性能瓶颈。 一、工具特点 高性能:利用 Node.js 异步非阻塞机制模拟高并发请求。实时监控:测试过程中动态展示请求统计和性能…...
【面试】封装、继承、多态的具象示例 模板编程的理解与应用场景 链表适用的场景
文章目录 C面试:封装、继承、多态的具象示例1. 封装 (Encapsulation)2. 继承 (Inheritance)3. 多态 (Polymorphism)综合示例:封装、继承、多态 C模板编程的理解与应用场景我对模板编程的理解C中最常用的模板编程场景1. STL (标准模板库)2. 通用容器实现3…...
机器学习02——概要
一、简介 机器学习是一门在没有明确编程的情况下让计算机学习的科学。 监督学习是有目标的,输入数据对应明确的输出;无监督学习则是“探索”型的,模型的目标是从数据中发现潜在的模式或结构,而不需要预先知道标签。 二、机器学…...
常用的网络安全靶场、工具箱
转载:https://blog.csdn.net/zjzqxzhj/article/details/137945444 打CTF很好玩。可以试一下 1.CTF在线工具 1、CTF在线工具箱:http://ctf.ssleye.com/ 包含CTF比赛中常用的编码、加解密、算法。 2、CTF加解密工具箱:http://www.atoolbox.…...
excel中的VBA指令示例(一)
示例注释: Sub 宏1() sub是宏开头,宏1是宏的名称,自定义,在按钮中可指定用某个宏 后面是注释 Sheets("装配材料").Select ‘选择表 装配材料 Ce…...
神经网络 | 基于脉冲耦合神经网络PCNN图像特征提取与匹配(附matlab代码)
内容未发表论文基于脉冲耦合神经网络(PCNN)的图像特征提取与匹配研究 摘要 本文提出一种基于脉冲耦合神经网络(Pulse-Coupled Neural Network, PCNN)的图像特征提取与匹配方法。通过模拟生物视觉皮层神经元的脉冲同步发放特性,PCNN能够有效捕捉图像纹理与边缘特征。实验表…...
Linux 内核中的 TCP 早期多路分解机制解析
一、引言 在现代高性能网络环境中,Linux 内核需要快速处理大量的 TCP 数据包,同时保持低延迟和高吞吐量。为了实现这一目标,Linux 内核引入了 早期多路分解(Early Demultiplexing) 机制。这种机制允许内核在数据包进入传输层之前,快速找到对应的套接字(socket)并关联数…...
Yalmip工具箱(3)——错误类型
在yalmip中,不可避免地我们会遇到求解出问题的情况,理解和处理错误信息是至关重要的环节。在这里我们查看yalmip的所有错误类型(详细见 yalmiperror.m 函数) 函数概述 yalmiperror函数的主要作用是根据YALMIP产生的错误代码&…...
【KWDB 创作者计划】_KWDB:开源引领数据库创新变革
在数字化浪潮汹涌澎湃的当下,数据已然成为驱动各行各业发展的核心要素。数据库作为数据管理的关键工具,其性能、功能以及开放性,对企业和社会的数字化进程起着举足轻重的作用。KWDB,作为数据库领域的一颗璀璨新星,正以…...
HarmonyOS学习 实验八:显式动画与属性动画的实现
鸿蒙系统动画开发实战:显式动画与属性动画的探索 引言 在鸿蒙系统的开发过程中,动画效果是提升用户体验的重要一环。通过巧妙运用动画,可以使应用界面更加生动、交互更加流畅。鸿蒙系统提供了丰富的动画开发能力,其中显式动画和…...
高校智慧能源系统解决方案:推动绿色校园建设的智能化实践
高校智慧能源系统解决方案:推动绿色校园建设的智能化实践 一、建设背景:政策驱动与绿色发展需求 为响应国家“碳达峰、碳中和”战略目标,教育部印发《绿色低碳发展国民教育体系建设实施方案》,明确提出需完善校园能源管理体系&a…...
win日志
以第一个为例子 打开后,右上角(将所有事件另存为xx)然后一般写今天的日期,进行备份 然后选择下语言即可 日志备份时间的选择(根据实际情况选择日志时间) 点击右侧事件属性,然后xml视图即可 常见的安全事件…...
嵌入式开发之51单片机入门(一)与LED灯的故事
得而不惜就该死。 --小泽 继续傻冒开始,这次的傻冒之旅是关于嵌入式的51单片机开发,这个系列只讲程序开发逻辑,如需初始环境安装配置,建议移步B站江协科技大佬,本系列也是对大佬所讲内容的复刻,同时添加一…...
TCP 与 UDP
TCP 与 UDP 的区别(重要) 是否面向连接:UDP 在传送数据之前不需要先建立连接。而 TCP 提供面向连接的服务,在传送数据之前必须先建立连接,数据传送结束后要释放连接。是否是可靠传输:远地主机在收到 UDP 报…...
Linux:进程地址空间
在讲述本篇文章之前,我们先来看一段代码。 从上图输出可以看到,我们的子进程继承了父进程的全局变量val,当子进程中的val产生了修改时,父进程的val值并没有变化,但父子进程在打印val的地址时,会发现val的地…...