MongoDB基础知识(浅显)

一、MongoDB 核心概念

MongoDB 是一个 面向文档的 NoSQL 数据库 ,与传统的关系型数据库(如 MySQL)相比,最大的区别是它以 文档(Document)为存储单元,而不是表和行。

1. 数据库(Database)

  • MongoDB 中可以有多个数据库,每个数据库包含多个集合。
  • 类似于关系型数据库中的"数据库"。

2. 集合(Collection)

  • 集合是 MongoDB 中存储文档的容器,类似于关系型数据库中的"表"。
  • 一个集合内可以存储多个文档(Document)。

3. 文档(Document)

  • 文档是 MongoDB 的基本数据单元,以 BSON(Binary JSON) 格式存储。

  • 每个文档是一个键值对结构,类似于 JSON 对象。

  • 示例:

    json 复制代码
    {
      "_id": ObjectId("5f9d1b3b9c9d6e1d9c9d6e1d"),
      "name": "Alice",
      "age": 25,
      "hobbies": ["reading", "music"],
      "address": {
        "city": "Beijing",
        "zip": "100000"
      }
    }

4. ObjectId

  • MongoDB 自动为每个文档生成一个唯一的 _id 字段,类型为 ObjectId
  • 它是一个 12 字节的唯一标识符,包含时间戳、机器标识、进程 ID 和随机数。

二、MongoDB 数据模型

1. 嵌套结构(Embedded Documents)

  • MongoDB 支持嵌套文档结构,可以将复杂的数据结构直接嵌入到一个文档中。
  • 例如:用户的地址信息可以直接嵌套在用户文档中,而不需要单独建表。

2. 数组(Arrays)

  • 支持数组类型字段,用于存储多个值。
  • 例如:用户可能有多个兴趣爱好,可以用数组存储。

3. 动态模式(Schema-less)

  • MongoDB 的集合没有严格的 schema 限制,同一个集合中的文档可以有不同的字段结构。
  • 这种灵活性非常适合处理半结构化或非结构化数据。

三、MongoDB 常用操作(Mongo Shell)

以下是一些 MongoDB 的基本操作命令,适用于 Mongo Shell (即 mongo 命令行工具)。

1. 连接数据库

bash 复制代码
mongo

2. 查看所有数据库

bash 复制代码
show dbs

3. 使用(创建)数据库

bash 复制代码
use mydb

4. 查看当前数据库的集合

bash 复制代码
show collections

5. 插入文档

bash 复制代码
db.users.insertOne({
  name: "Alice",
  age: 25,
  hobbies: ["reading", "music"],
  address: {
    city: "Beijing",
    zip: "100000"
  }
})

6. 查询文档

bash 复制代码
db.users.find({ name: "Alice" })

7. 更新文档

bash 复制代码
db.users.updateOne(
  { name: "Alice" },
  { $set: { age: 26 } }
)

8. 删除文档

bash 复制代码
db.users.deleteOne({ name: "Alice" })

9. 创建索引

bash 复制代码
db.users.createIndex({ name: 1 })  // 1 表示升序,-1 表示降序

10. 聚合查询(Aggregation)

bash 复制代码
db.users.aggregate([
  { $match: { age: { $gt: 20 } } },
  { $group: { _id: null, avgAge: { $avg: "$age" } } }
])

四、MongoDB 的适用场景

MongoDB 的设计使其特别适合以下场景:

1. 灵活的数据结构

  • 适用于数据结构频繁变化的场景,如日志系统、用户行为记录等。

2. 高扩展性需求

  • 支持水平扩展(分片),适合处理大量数据和高并发访问。

3. 嵌套数据处理

  • 适合需要嵌套结构的数据,如用户配置、产品信息、地理位置数据等。

4. 实时数据分析

  • 通过聚合框架可以快速进行实时分析,如统计用户行为、日志分析等。

5. 内容管理系统

  • 适合存储文章、评论、标签等内容,支持灵活的嵌套和扩展。

五、MongoDB 与其他数据库的对比

特性 MongoDB(NoSQL) MySQL(SQL)
数据结构 文档(JSON-like) 表(Rows & Columns)
查询语言 MongoDB Query Language SQL
事务支持 从 4.0 开始支持多文档事务 原生支持
扩展性 水平扩展(分片) 垂直扩展为主
索引支持 支持多种索引类型 支持基本索引
适用场景 半结构化数据、大数据 结构化数据、事务处理

六、MongoDB 的局限性

虽然 MongoDB 非常灵活,但也有一些局限性需要注意:

  • 不支持复杂的 JOIN 操作 :虽然可以通过 $lookup 实现类似功能,但性能不如 SQL。
  • 事务支持有限:虽然支持多文档事务,但性能和使用场景受限。
  • 数据一致性较弱:默认是最终一致性,适合对一致性要求不高的场景。
  • 占用存储空间较大:由于存储的是 BSON,相比压缩后的二进制数据会更占空间。
相关推荐
风哥2号6 分钟前
数据库教程FGMT28‑Windows‑MySQL5.7‑8.0‑8.4-9.7安装配置
数据库·mysql
2601_962218617 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
李高钢8 小时前
Python FastAPI 框架入门:从零搭建你的第一个高性能 API 服务
数据库·python·fastapi
yuzhiboyouye10 小时前
那xml对应的sql语法,列举一下
xml·数据库·sql
. . . . .10 小时前
乐观锁 vs 悲观锁
数据库·sql
Leo.yuan10 小时前
2026年多数据库实时同步的四种架构方案及工具推荐
数据库·架构
hasty11 小时前
Origin 校验不是身份认证:MySQL MCP Server 漏洞给 AI 平台的警告
数据库·mysql·安全
梦想平凡12 小时前
百游棋牌源代码开发搭建教程(五):房间创建、座位分配与请求幂等实现
前端·javascript·数据库·源代码管理
凤山老林12 小时前
Spring Boot 整合 Flowable 的企业级落地指南
数据库·spring boot·后端·flowable·工作流
企业数字化笔记12 小时前
AI写的系统出现504怎么办?接口超时和数据库慢查询排查
数据库·后端