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,相比压缩后的二进制数据会更占空间。
相关推荐
计算机毕设VX:Fegn08953 小时前
计算机毕业设计|基于springboot + vue医院设备管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
Mr__Miss3 小时前
保持redis和数据库一致性(双写一致性)
数据库·redis·spring
Knight_AL4 小时前
Spring 事务传播行为 + 事务失效原因 + 传播行为为什么不用其他模式
数据库·sql·spring
倔强的石头_4 小时前
时序数据时代的“存储与分析困局”解析及金仓解决方案
数据库
计算机毕设VX:Fegn08954 小时前
计算机毕业设计|基于springboot + vue小型房屋租赁系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
倔强的石头_5 小时前
场景化落地指南——金仓时序数据库在关键行业的应用实践
数据库
SelectDB5 小时前
驾驭 CPU 与编译器:Apache Doris 实现极致性能的底层逻辑
运维·数据库·apache
zbguolei6 小时前
MySQL根据身份证号码计算出生日期和年龄
数据库·mysql
马克学长6 小时前
SSM校园图书借阅服务系统jd2z8(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·图书管理系统·ssm 框架·ssm 校园图书借阅系统
软件派6 小时前
高斯数据库使用心得——从性能优化到行业实践的深度解析
数据库·oracle