MongoDB入门学习教程,从入门到精通,MongoDB入门指南 —— 知识点详解(2)

MongoDB入门指南 ------ 知识点详解

1. 文档(Document)

  • 定义:文档是MongoDB中数据的基本单元,类似于关系型数据库中的"行"(row),但结构更灵活。

  • 格式:采用BSON(Binary JSON)格式存储,本质上是JSON对象的二进制表示。

  • 特点

    • 键值对结构(key-value pairs)
    • 支持嵌套(如数组、子文档)
    • 字段顺序不重要,但字段名区分大小写
    • 每个文档必须包含一个 _id 字段(唯一标识符,默认为 ObjectId 类型)
  • 示例

    json 复制代码
    {
      "_id": ObjectId("507f1f77bcf86cd799439011"),
      "name": "张三",
      "age": 28,
      "hobbies": ["读书", "编程"],
      "address": {
        "city": "北京",
        "district": "海淀区"
      }
    }

2. 集合(Collection)

  • 定义:集合是文档的容器,类似于关系型数据库中的"表"(table)。
  • 特点
    • 无固定模式(schema-less):同一集合中的文档可以具有不同结构
    • 集合名不能包含空字符 \0,不能以 system. 开头(保留用途)
    • 集合名区分大小写
  • 动态创建:无需预先定义集合,首次插入文档时自动创建
  • 命名规范:建议使用小写字母、下划线,避免特殊字符

3. 数据库(Database)

  • 定义:数据库是集合的逻辑容器,用于组织和隔离数据。
  • 特点
    • 一个MongoDB实例可包含多个数据库
    • 数据库名区分大小写
    • 数据库名不能包含空格、.$\0 等非法字符
    • 默认存在几个系统数据库:adminlocalconfig
  • 常用命令
    • show dbs:列出所有数据库
    • use <dbname>:切换或创建数据库(若不存在则创建)
    • 注意:空数据库不会在 show dbs 中显示,需至少有一个集合才可见

4. 启动MongoDB

  • 服务端启动(mongod)

    bash 复制代码
    mongod --dbpath /data/db
    • --dbpath 指定数据存储目录(默认 /data/db,需提前创建并赋权限)
    • 可通过 --port 指定端口(默认27017)
    • 后台运行可加 --fork(需配合 --logpath
  • 客户端连接(mongo 或 mongosh)

    bash 复制代码
    mongosh
    # 或指定主机端口
    mongosh "mongodb://localhost:27017"
  • 验证服务是否运行

    • 查看进程:ps aux | grep mongod
    • 检查端口:netstat -tuln | grep 27017

5. MongoDB Shell 介绍

  • 作用:交互式JavaScript环境,用于管理MongoDB实例、执行CRUD操作、管理数据库等。
  • 启动方式 :终端输入 mongosh(新版)或 mongo(旧版)
  • 核心特性
    • 支持JavaScript语法
    • 自动补全(Tab键)
    • 历史命令记录(上下箭头)
    • 内置帮助命令:helpdb.help()db.collection.help()
  • 常用全局变量
    • db:当前数据库对象
    • version():查看Shell版本
    • quit():退出Shell

6. 数据类型

MongoDB支持丰富的BSON数据类型,常见如下:

类型 说明 示例
String UTF-8字符串 "hello"
Integer 32位或64位整数 42
Double 浮点数 3.14
Boolean 布尔值 true / false
ObjectId 12字节唯一ID(常用于 _id ObjectId("...")
Date 时间戳(毫秒) new Date()
Array 数组 [1, 2, "a"]
Object 嵌套文档 { name: "李四" }
Null 空值 null
Binary Data 二进制数据 BinData(0, "...")

⚠️ 注意:JavaScript中所有数字默认为 Double,若需整数应显式使用 NumberInt(42)NumberLong("1234567890123")

7. 使用MongoDB Shell 进行基本操作

7.1 数据库与集合操作

javascript 复制代码
// 切换/创建数据库
use mydb

// 查看当前数据库
db.getName()

// 创建集合并插入文档(隐式创建)
db.users.insertOne({ name: "王五", age: 30 })

// 显式创建集合(可选)
db.createCollection("logs")

// 查看当前数据库下的所有集合
show collections

7.2 文档操作(CRUD)

javascript 复制代码
// 插入
db.users.insertMany([
  { name: "赵六", age: 25 },
  { name: "孙七", age: 35 }
])

// 查询
db.users.find()               // 查所有
db.users.find({ age: { $gt: 30 } })  // 条件查询

// 更新
db.users.updateOne(
  { name: "王五" },
  { $set: { age: 31 } }
)

// 删除
db.users.deleteOne({ name: "孙七" })

7.3 其他实用命令

javascript 复制代码
// 清屏(部分Shell支持)
cls

// 查看执行时间
db.users.find().explain("executionStats")

// 退出
exit 或 quit()

总结

本章是MongoDB学习的基石,重点掌握:

  • 文档作为灵活的数据单元;
  • 集合数据库的层级关系;
  • 通过 Shell 进行交互式操作;
  • 理解 BSON数据类型 对数据建模的影响;
  • 能独立完成 MongoDB服务的启动与基本CRUD操作

这些知识为后续学习索引、聚合、复制集、分片等高级功能打下坚实基础。

相关推荐
炽烈小老头2 小时前
【 每天学习一点算法 2026/03/24】寻找峰值
学习·算法
what_20182 小时前
PostgreSQL 索引
数据库·postgresql
麦聪聊数据2 小时前
跨云与多区服游戏架构下的数据库运维:基于webSQL的访问实践
数据库·sql·低代码·游戏·restful
Nan_Shu_6142 小时前
学习:Cesium (3)
学习
eggwyw2 小时前
MySQL 与 Redis 的数据一致性问题
数据库·redis·mysql
2401_879693872 小时前
使用Python控制Arduino或树莓派
jvm·数据库·python
秦jh_3 小时前
【Redis】Set和Zset
数据库·redis·缓存
what_20183 小时前
PostgreSQL 时间
数据库·postgresql
Nyarlathotep01133 小时前
Redis的数据结构(4):跳表
数据库·redis