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 示例

    bash 复制代码
    sudo apt-get install mongodb

2.2 启动

2.2.1 创建数据目录
bash 复制代码
mkdir -p /data/db  # 默认数据存储路径
2.2.2 编写启动脚本
bash 复制代码
mongod --dbpath=/data/db  # 启动 MongoDB 服务

2.3 连接

使用 MongoDB Shell 连接:

bash 复制代码
mongo  # 默认连接本地服务

3. 基本操作

3.1 选择或创建数据库

javascript 复制代码
use mydb  // 切换到 mydb,若不存在则自动创建

3.2 新增

向集合插入文档(类似 MySQL 的 INSERT):(对当前数据库操作统一使用db,而不是当前的数据库名)

javascript 复制代码
db.users.insertOne({ name: "张三", age: 25 })  // 插入单条
db.users.insertMany([{ name: "李四" }, { name: "王五" }])  // 插入多条

3.3 查询

3.3.1 查询全部文档(类似 SELECT *)
javascript 复制代码
db.users.find()  
3.3.2 条件查询(类似 WHERE)
javascript 复制代码
db.users.find({ age: 25 })  // 查询 age=25 的文档
3.3.3 查询第一条(类似 LIMIT 1)
javascript 复制代码
db.users.findOne()  

3.4 更新(类似 UPDATE)

javascript 复制代码
db.users.updateOne(
  { name: "张三" },  // 条件
  { $set: { age: 30 } }  // 更新操作
)

3.5 删除

3.5.1 删除文档(类似 DELETE)
javascript 复制代码
db.users.deleteOne({ name: "张三" })  
3.5.2 删除集合(类似 DROP TABLE)
javascript 复制代码
db.users.drop()  
3.5.3 删除数据库
javascript 复制代码
db.dropDatabase()  

4. 高级查询

4.1 准备数据

javascript 复制代码
db.products.insertMany([
  { name: "手机", price: 3000, stock: 100 },
  { name: "电脑", price: 8000, stock: null },
  { name: "耳机", price: 200 }
])

4.2 模糊查询(类似 LIKE)

javascript 复制代码
db.products.find({ name: /手/ })  // 正则表达式匹配

4.3 null 值处理

javascript 复制代码
db.products.find({ stock: null })  // 查询 stock 为 null 或不存在

4.4 比较运算(如 >, <)

javascript 复制代码
db.products.find({ price: { $gt: 2000 } })  // price > 2000

4.5 判断属性是否存在

javascript 复制代码
db.products.find({ stock: { $exists: true } })  // 查询包含 stock 字段的文档

4.6 包含与不包含(类似 IN)

javascript 复制代码
db.products.find({ name: { $in: ["手机", "耳机"] } })  // 包含指定值

4.7 统计记录数(类似 COUNT)

javascript 复制代码
db.products.countDocuments({ price: { $gt: 2000 } })

4.8 条件连接(AND/OR)

javascript 复制代码
db.products.find({
  $and: [
    { price: { $gt: 1000 } },
    { price: { $lt: 5000 } }
  ]
})
// g:great
// l:less

总结

  1. MongoDB vs MySQL
    • 数据模型:文档 vs 表格。
    • 查询语法:JSON 式操作 vs SQL 语句。
    • 扩展性:水平扩展 vs 垂直扩展。
  2. 核心操作
    • 增删改查通过 insertdeleteupdatefind 实现。
    • 高级查询支持正则、比较运算符、逻辑连接等。
  3. 适用场景
    • 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 条件
数据一致性 最终一致性(分布式场景) 强一致性(单机或主从复制)
典型缺点 不支持复杂关联查询,事务实现较复杂 扩展性受限,处理非结构化数据效率低

总结

  1. 术语差异:MongoDB 的"文档"对应 MySQL 的"行","集合"对应"表","字段"对应"列"。
  2. 语法差异
    • MongoDB 使用 JSON 风格的查询语法(如 find({条件})),而 MySQL 使用标准 SQL 语句。
    • MongoDB 通过操作符(如 $gt, $in)实现复杂条件,MySQL 直接使用运算符(如 >, IN)。
  3. 核心特性
    • MongoDB 灵活、易扩展,适合非结构化数据;
    • MySQL 强事务、强一致性,适合结构化数据和复杂查询。
  4. 选择建议
    • 用 MongoDB:需要快速迭代、处理海量数据或半结构化数据(如日志、用户行为)。
    • 用 MySQL:需要强事务支持、复杂关联查询(如金融系统)。

重点口诀:灵活用 Mongo,事务用 MySQL;文档即 JSON,查询靠 BSON!

相关推荐
我爱挣钱我也要早睡!2 小时前
Java 复习笔记
java·开发语言·笔记
luckys.one4 小时前
第9篇:Freqtrade量化交易之config.json 基础入门与初始化
javascript·数据库·python·mysql·算法·json·区块链
言之。6 小时前
Django中的软删除
数据库·django·sqlite
汇能感知6 小时前
摄像头模块在运动相机中的特殊应用
经验分享·笔记·科技
阿巴Jun7 小时前
【数学】线性代数知识点总结
笔记·线性代数·矩阵
茯苓gao7 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾7 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
阿里嘎多哈基米7 小时前
SQL 层面行转列
数据库·sql·状态模式·mapper·行转列
抠脚学代码7 小时前
Ubuntu Qt x64平台搭建 arm64 编译套件
数据库·qt·ubuntu
jakeswang8 小时前
全解MySQL之死锁问题分析、事务隔离与锁机制的底层原理剖析
数据库·mysql