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等非法字符 - 默认存在几个系统数据库:
admin、local、config
- 常用命令 :
show dbs:列出所有数据库use <dbname>:切换或创建数据库(若不存在则创建)- 注意:空数据库不会在
show dbs中显示,需至少有一个集合才可见
4. 启动MongoDB
-
服务端启动(mongod):
bashmongod --dbpath /data/db--dbpath指定数据存储目录(默认/data/db,需提前创建并赋权限)- 可通过
--port指定端口(默认27017) - 后台运行可加
--fork(需配合--logpath)
-
客户端连接(mongo 或 mongosh):
bashmongosh # 或指定主机端口 mongosh "mongodb://localhost:27017" -
验证服务是否运行:
- 查看进程:
ps aux | grep mongod - 检查端口:
netstat -tuln | grep 27017
- 查看进程:
5. MongoDB Shell 介绍
- 作用:交互式JavaScript环境,用于管理MongoDB实例、执行CRUD操作、管理数据库等。
- 启动方式 :终端输入
mongosh(新版)或mongo(旧版) - 核心特性 :
- 支持JavaScript语法
- 自动补全(Tab键)
- 历史命令记录(上下箭头)
- 内置帮助命令:
help、db.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操作。
这些知识为后续学习索引、聚合、复制集、分片等高级功能打下坚实基础。