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,相比压缩后的二进制数据会更占空间。
相关推荐
上海安当技术几秒前
统一身份认证平台怎么落地?11 个异构业务系统接入 ASP 的完整实施路径
数据库·servlet·架构·kubernetes·jenkins
在水一缸1 小时前
PGSimCity:当数据库内核变成一座可以漫步的城市
数据库·postgresql·可视化·开源项目·数据库内核·pgsimcity·技术科普
jnrjian1 小时前
psql 执行多个 sql 文件
数据库·sql
@insist1233 小时前
信息系统管理工程师-运维人员管理与核心运维过程(上篇)
数据库·软考·软件水平考试·信息系统管理工程师·软考信管
csdn杰哥3 小时前
瑞萨单片机开发教程[二十七] DTC 外部中断触发传输实验
单片机·嵌入式硬件·mongodb·瑞萨·ra6m5
muddjsv4 小时前
SQLite 零基础 CRUD 实战详解:增删改查标准语法与高危避坑
数据库·sqlite
~光~~5 小时前
【嵌入式linux学习_OV8858 bring up】L2_V4L2与Ov8858
linux·数据库·学习
菜地里的小菜鸟5 小时前
达梦数据库备份与恢复
数据库·达梦·达梦数据库备份与恢复
小蒜学长5 小时前
基于SpringBoot的社区供暖管理系统设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端
llwszx6 小时前
Redis ZSet 完全指南:从应用场景到核心原理
数据库·redis·缓存·跳表·哈希表·zset