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,相比压缩后的二进制数据会更占空间。
相关推荐
fen_fen14 小时前
Oracle建表语句示例
数据库·oracle
砚边数影15 小时前
数据可视化入门:Matplotlib 基础语法与折线图绘制
数据库·信息可视化·matplotlib·数据可视化·kingbase·数据库平替用金仓·金仓数据库
orange_tt15 小时前
Djiango配置Celery
数据库·sqlite
云小逸16 小时前
【nmap源码学习】 Nmap网络扫描工具深度解析:从基础参数到核心扫描逻辑
网络·数据库·学习
肉包_51116 小时前
两个数据库互锁,用全局变量互锁会偶发软件卡死
开发语言·数据库·c++
霖霖总总17 小时前
[小技巧64]深入解析 MySQL InnoDB 的 Checkpoint 机制:原理、类型与调优
数据库·mysql
此刻你17 小时前
常用的 SQL 语句
数据库·sql·oracle
それども18 小时前
分库分表的事务问题 - 怎么实现事务
java·数据库·mysql
·云扬·18 小时前
MySQL Binlog 配置指南与核心作用解析
数据库·mysql·adb
天空属于哈夫克319 小时前
Java 版:利用外部群 API 实现自动“技术开课”倒计时提醒
数据库·python·mysql