Appearance
入门介绍
本章将介绍MongoDB的基本概念、安装配置方法以及MongoDB Shell的基本使用。
MongoDB概述
什么是MongoDB
MongoDB是一个基于分布式文件存储的开源数据库系统,由MongoDB Inc.开发。它使用BSON(Binary JSON)格式存储数据,是一种面向文档的NoSQL数据库。
javascript
// MongoDB文档示例
{
"_id": ObjectId("507f1f77bcf86cd799439011"), // 自动生成的唯一标识
"name": "张三", // 字符串类型
"age": 25, // 数字类型
"email": "zhangsan@example.com", // 字符串类型
"hobbies": ["阅读", "编程", "旅游"], // 数组类型
"address": { // 嵌套文档
"city": "北京",
"street": "朝阳路"
},
"createdAt": ISODate("2024-01-01T00:00:00Z") // 日期类型
}MongoDB的特点
javascript
// MongoDB的核心特点:
// 1. 文档模型
// 数据以文档形式存储,类似JSON对象,易于理解和操作
// 文档可以包含嵌套结构和数组
// 2. 灵活的Schema
// 同一集合中的文档可以有不同的字段
// 不需要预先定义表结构
// 3. 丰富的查询语言
// 支持条件查询、范围查询、正则匹配等
// 支持聚合管道进行复杂数据处理
// 4. 索引支持
// 支持多种索引类型(单字段、复合、文本、地理空间等)
// 支持索引优化查询性能
// 5. 高可用性
// 支持复制集(Replica Set)实现数据冗余
// 自动故障转移
// 6. 水平扩展
// 支持分片(Sharding)实现水平扩展
// 可处理海量数据BSON数据格式
javascript
// BSON(Binary JSON)是MongoDB的二进制编码格式
// BSON支持的类型比JSON更丰富:
// - ObjectId:12字节的唯一标识符
// - Date:日期时间
// - Binary Data:二进制数据
// - Code:JavaScript代码
// - Regex:正则表达式
// - Decimal128:高精度小数
// BSON类型示例
{
"_id": ObjectId("507f1f77bcf86cd799439011"), // ObjectId类型
"name": "张三",
"age": NumberInt(25), // 32位整数
"balance": NumberDecimal("100.50"), // 高精度小数
"createdAt": ISODate("2024-01-01T00:00:00Z"), // 日期类型
"pattern": /^张/, // 正则表达式
"data": BinData(0, "aGVsbG8=") // 二进制数据
}安装MongoDB
Windows安装
powershell
# Windows安装步骤:
# 1. 下载MongoDB安装包
# 访问官网:https://www.mongodb.com/try/download/community
# 选择Windows版本下载
# 2. 运行安装程序
# 双击.msi文件,按向导安装
# 3. 配置环境变量
# 将MongoDB的bin目录添加到系统PATH
# 例如:C:\Program Files\MongoDB\Server\7.0\bin
# 4. 创建数据和日志目录
mkdir C:\data\db
mkdir C:\data\log
# 5. 启动MongoDB服务
# 方式一:命令行启动
mongod --dbpath C:\data\db --logpath C:\data\log\mongodb.log
# 方式二:安装为Windows服务
mongod --install --dbpath C:\data\db --logpath C:\data\log\mongodb.log
net start MongoDB
# 6. 验证安装
mongod --versionLinux安装
bash
# Ubuntu/Debian安装步骤:
# 1. 导入MongoDB公钥
wget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | sudo apt-key add -
# 2. 添加MongoDB源
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
# 3. 更新包列表
sudo apt-get update
# 4. 安装MongoDB
sudo apt-get install -y mongodb-org
# 5. 启动MongoDB服务
sudo systemctl start mongod
sudo systemctl enable mongod
# 6. 验证服务状态
sudo systemctl status mongod
# CentOS/RHEL安装步骤:
# 1. 创建yum源文件
sudo cat > /etc/yum.repos.d/mongodb-org-7.0.repo << EOF
[mongodb-org-7.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/7.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-7.0.asc
EOF
# 2. 安装MongoDB
sudo yum install -y mongodb-org
# 3. 启动服务
sudo systemctl start mongod
sudo systemctl enable mongodmacOS安装
bash
# macOS安装步骤:
# 方式一:使用Homebrew(推荐)
# 1. 更新Homebrew
brew update
# 2. 安装MongoDB
brew tap mongodb/brew
brew install mongodb-community@7.0
# 3. 启动MongoDB服务
brew services start mongodb-community@7.0
# 4. 验证安装
mongod --version
# 方式二:手动安装
# 1. 下载macOS版本的MongoDB
# 2. 解压到目标目录
# 3. 创建数据和日志目录
# 4. 启动MongoDBDocker安装
bash
# 使用Docker运行MongoDB(推荐用于开发环境)
# 1. 拉取MongoDB镜像
docker pull mongo:7.0
# 2. 运行MongoDB容器
docker run -d \
--name mongodb \
-p 27017:27017 \
-v mongodb_data:/data/db \
-v mongodb_config:/data/configdb \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=password123 \
mongo:7.0
# 3. 查看容器状态
docker ps
# 4. 进入MongoDB Shell
docker exec -it mongodb mongosh -u admin -p password123
# 5. 停止和启动容器
docker stop mongodb
docker start mongodb
# 使用Docker Compose运行MongoDB
# docker-compose.yml文件内容:
version: '3.8'
services:
mongodb:
image: mongo:7.0
container_name: mongodb
ports:
- "27017:27017"
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: password123
volumes:
- mongodb_data:/data/db
- mongodb_config:/data/configdb
volumes:
mongodb_data:
mongodb_config:
# 启动服务
docker-compose up -dMongoDB Shell
连接MongoDB
javascript
// 使用mongosh连接MongoDB(MongoDB 5.0+推荐使用mongosh)
// 基本连接(本地默认端口)
mongosh
// 连接指定主机和端口
mongosh --host localhost --port 27017
// 连接指定数据库
mongosh mongodb://localhost:27017/mydb
// 使用用户名密码连接
mongosh mongodb://admin:password123@localhost:27017/admin
// 使用连接字符串
mongosh "mongodb+srv://cluster0.example.com/mydb" --username admin
// 连接成功后的提示
// Current Mongosh Log ID: 65a1b2c3d4e5f6g7h8i9j0k1
// Connecting to: mongodb://127.0.0.1:27017
// Using MongoDB: 7.0.0
// Using Mongosh: 2.0.0基本Shell操作
javascript
// MongoDB Shell基本操作
// 查看所有数据库
show dbs
// 输出示例:
// admin 40.00 KiB
// config 72.00 KiB
// local 40.00 KiB
// 切换/创建数据库
use mydb
// 输出:switched to db mydb
// 查看当前数据库
db
// 输出:mydb
// 查看当前数据库的所有集合
show collections
// 查看数据库状态
db.stats()
// 查看服务器状态
db.serverStatus()
// 查看MongoDB版本
db.version()
// 退出Shell
exit
// 或
quit()Shell常用命令
javascript
// MongoDB Shell常用命令
// 1. 帮助命令
help // 显示帮助信息
db.help() // 显示数据库方法帮助
db.collection.help() // 显示集合方法帮助
// 2. 数据库操作
show dbs // 显示所有数据库
use dbname // 切换数据库
db.dropDatabase() // 删除当前数据库
// 3. 集合操作
show collections // 显示所有集合
db.createCollection("users") // 创建集合
db.collection.drop() // 删除集合
// 4. 文档操作
db.collection.insertOne({}) // 插入一条文档
db.collection.insertMany([{}]) // 插入多条文档
db.collection.find({}) // 查询文档
db.collection.updateOne({}, {}) // 更新一条文档
db.collection.deleteOne({}) // 删除一条文档
// 5. 索引操作
db.collection.getIndexes() // 查看索引
db.collection.createIndex({}) // 创建索引
db.collection.dropIndex("") // 删除索引
// 6. 执行JavaScript
// Shell支持执行JavaScript代码
var x = 10;
var y = 20;
print(x + y); // 输出:30
// 7. 加载外部脚本
load("script.js")配置文件
mongod.conf配置
yaml
# MongoDB配置文件示例 (mongod.conf)
# 存储配置
storage:
dbPath: /var/lib/mongodb # 数据存储路径
journal:
enabled: true # 启用journal日志
engine: wiredTiger # 存储引擎
# 日志配置
systemLog:
destination: file # 日志输出到文件
path: /var/log/mongodb/mongod.log # 日志文件路径
logAppend: true # 追加模式
verbosity: 1 # 日志级别
# 网络配置
net:
port: 27017 # 监听端口
bindIp: 127.0.0.1,192.168.1.100 # 绑定IP(多个用逗号分隔)
maxIncomingConnections: 65536 # 最大连接数
# 安全配置
security:
authorization: enabled # 启用认证
keyFile: /etc/mongodb/keyfile # 集群认证密钥文件
# 复制集配置
replication:
replSetName: rs0 # 复制集名称
oplogSizeMB: 1024 # oplog大小
# 分片配置
sharding:
clusterRole: shardsvr # 分片角色(shardsvr/configsvr)
# 性能配置
setParameter:
enableFlowControl: true # 启用流量控制启动时指定配置文件
bash
# 使用配置文件启动MongoDB
# Linux/macOS
mongod --config /etc/mongod.conf
# 或
mongod -f /etc/mongod.conf
# Windows
mongod --config "C:\Program Files\MongoDB\Server\7.0\bin\mongod.cfg"
# 以服务方式启动(使用配置文件)
# Linux systemd
sudo systemctl start mongod
# Windows
net start MongoDB数据模型
文档结构
javascript
// MongoDB文档结构设计
// 1. 扁平结构
{
"_id": ObjectId("..."),
"name": "张三",
"age": 25,
"email": "zhangsan@example.com"
}
// 2. 嵌套结构(推荐)
{
"_id": ObjectId("..."),
"name": {
"first": "三",
"last": "张"
},
"contact": {
"email": "zhangsan@example.com",
"phone": "13800138000"
},
"address": {
"city": "北京",
"street": "朝阳路",
"zipCode": "100000"
}
}
// 3. 数组结构
{
"_id": ObjectId("..."),
"name": "张三",
"hobbies": ["阅读", "编程", "旅游"], // 简单数组
"education": [ // 对象数组
{
"school": "清华大学",
"degree": "本科",
"year": 2018
},
{
"school": "北京大学",
"degree": "硕士",
"year": 2022
}
]
}
// 4. 引用结构(类似关系型外键)
// 用户文档
{
"_id": ObjectId("user001"),
"name": "张三"
}
// 订单文档(引用用户)
{
"_id": ObjectId("order001"),
"userId": ObjectId("user001"), // 引用用户ID
"product": "MacBook Pro",
"price": 12999
}嵌套vs引用
javascript
// 选择嵌套还是引用的原则:
// 适合嵌套的场景:
// 1. 一对少关系
// 2. 数据经常一起访问
// 3. 数据量较小
// 4. 数据不需要独立更新
// 用户-地址(一对少,适合嵌套)
{
"_id": ObjectId("..."),
"name": "张三",
"addresses": [
{ "type": "home", "city": "北京" },
{ "type": "work", "city": "上海" }
]
}
// 适合引用的场景:
// 1. 一对多/多对多关系
// 2. 数据需要独立访问和更新
// 3. 数据量较大
// 4. 避免数据重复
// 用户-订单(一对多,适合引用)
// 用户文档
{
"_id": ObjectId("user001"),
"name": "张三"
}
// 订单文档
{
"_id": ObjectId("order001"),
"userId": ObjectId("user001"),
"product": "MacBook Pro"
}本章小结
本章介绍了MongoDB的基础知识:
- MongoDB概述:了解MongoDB是什么,它的特点和BSON数据格式
- 安装配置:掌握在Windows、Linux、macOS和Docker中安装MongoDB的方法
- MongoDB Shell:学会使用Shell连接和操作MongoDB
- 配置文件:了解mongod.conf的主要配置项
- 数据模型:理解文档结构设计和嵌套vs引用的选择
下一章,我们将学习数据库操作,了解如何创建和管理MongoDB数据库。
