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

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

总结

  1. MongoDB vs MySQL
    • 数据模型:文档 vs 表格。
    • 查询语法:JSON 式操作 vs SQL 语句。
    • 扩展性:水平扩展 vs 垂直扩展。
  2. 核心操作
    • 增删改查通过 insertdeleteupdatefind 实现。
    • 高级查询支持正则、比较运算符、逻辑连接等。
  3. 适用场景
    • MongoDB:大数据量、高并发、灵活模式需求。
    • MySQL:事务强一致性、复杂关联查询。
对比项MongoDBMySQL
数据库类型文档型数据库(NoSQL)关系型数据库(SQL)
数据模型以 BSON(类似 JSON)格式存储文档以表格(行和列)形式存储数据
术语对比
- 数据库DatabaseDatabase
- 表/集合CollectionTable
- 行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, $ltWHERE 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!

http://www.dtcms.com/a/122457.html

相关文章:

  • GitHub优秀项目:数据湖的管理系统LakeFS
  • 42、JavaEE高级主题:WebSocket详解
  • linux入门四:Linux 编译器
  • leetcode_面试题 02.07. 链表相交_java
  • Interactron: Embodied Adaptive Object Detection(训练时进行更新参数) 还没看懂
  • 金融数据分析(Python)个人学习笔记(7):网络数据采集以及FNN分类
  • React八案例上
  • Seq2Seq - 编码器(Encoder)和解码器(Decoder)
  • Linux系统安全及应用
  • Spring AI Alibaba MCP 市场正式上线!
  • spark安装过程问题
  • CSS 定位属性的生动比喻:以排队为例理解 relative 与 absolute
  • HP EVA SAN 的基础知识及常见数据丢失问题
  • 【nnUNetv2进阶】二十九、nnUNetv2 魔改网络-小试牛刀-引入RCM(Rectangular Self-Calibration Module)
  • Mybatis操作数据库
  • 8. git branch
  • spring mvc 异常处理中@RestControllerAdvice 和 @ControllerAdvice 对比详解
  • Linux服务器——Samba服务器
  • 【C++编程基础-关键字】:constexpr和const
  • Vue3服务端渲染实战:Nuxt3深度解析与高性能SSR架构设计
  • vLLM实战:多机多卡大模型分布式推理部署全流程指南
  • 深入探究Python的re模块及其在爬虫中的应用
  • 界面控件DevExpress WPF v25.1新功能预览 - 数据网格、报表性能增强
  • [特殊字符] Hyperlane:Rust 高性能 HTTP 服务器库,开启 Web 服务新纪元!
  • ARM裸机全集学习笔记【链接来源:向阳而生,逆风翻盘】
  • 智能家居设备
  • Ansible(5)——编写 Playbook
  • SpringMVC的请求-文件上传
  • 如何利用 Java 爬虫获取京东商品详情信息
  • scala总结与spark安装