MongoDB安装实战指南
一、MongoDB简介
1.1 什么是MongoDB
MongoDB是一个基于文档的NoSQL数据库,由C++语言编写,旨在为Web应用提供可扩展的高性能数据存储解决方案。
1.2 核心特性
|--------|------------------------|
| 特性 | 说明 |
| 文档存储 | 使用BSON格式存储数据,支持嵌套文档和数组 |
| 灵活模式 | 无需预定义表结构,字段可以动态添加 |
| 高性能 | 支持索引、聚合查询、全文搜索 |
| 高可用性 | 支持副本集、自动故障转移 |
| 可扩展性 | 支持分片,水平扩展数据容量 |
| 丰富的查询 | 支持丰富的查询语言和聚合管道 |
| 原子操作 | 支持文档级别的原子操作 |
1.3 应用场景
• 内容管理系统(CMS)
• 社交网络应用
• 实时数据分析
• 物联网(IoT)数据存储
• 游戏开发
• 电商系统
• 日志管理
二、Windows系统安装
2.1 系统要求
|--------|-------------------------------------|
| 组件 | 要求 |
| 操作系统 | Windows 10/11, Windows Server 2016+ |
| 处理器 | x86_64架构 |
| 内存 | 至少4GB RAM(推荐8GB+) |
| 磁盘空间 | 至少5GB可用空间 |
| 网络 | 需要网络连接下载安装包 |
2.2 安装步骤
方法一:使用MSI安装包
-
访问MongoDB官网下载页面:https://www.mongodb.com/try/download/community
-
选择Windows平台,选择版本(推荐最新稳定版)
-
下载.msi安装包
-
双击运行安装程序
-
在安装向导中选择"Complete"完整安装
-
勾选"Install MongoDB as a Service"(作为Windows服务安装)
-
勾选"Install MongoDB Compass"(图形化管理工具)
-
设置数据目录(默认:C:\data\db)
-
设置日志目录(默认:C:\data\log)
-
点击"Install"开始安装
-
安装完成后点击"Finish"
方法二:使用ZIP压缩包
-
下载ZIP压缩包版本
-
解压到指定目录(如:C:\mongodb)
-
创建数据目录:mkdir C:\data\db
-
创建日志目录:mkdir C:\data\log
-
创建配置文件mongod.cfg
-
手动启动或配置为服务
2.3 配置文件
创建配置文件C:\Program Files\MongoDB\Server\7.0\bin\mongod.cfg:
网络配置
net:
port: 27017
bindIp: 127.0.0.1
存储配置
storage:
dbPath: C:\\data\\db
journal:
enabled: true
日志配置
systemLog:
destination: file
path: C:\\data\\log\\mongod.log
logAppend: true
安全配置
security:
authorization: enabled
2.4 环境变量配置
将MongoDB bin目录添加到系统PATH环境变量:
MongoDB bin目录路径
C:\Program Files\MongoDB\Server\7.0\bin
验证安装
mongod --version
mongo --version
三、Linux系统安装
3.1 Ubuntu/Debian安装
步骤1:导入公钥
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
sudo apt-get install -y mongodb-org
3.2 CentOS/RHEL安装
步骤1:创建仓库配置文件
sudo tee /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.3 创建数据目录
创建数据目录
sudo mkdir -p /data/db
设置权限
sudo chown -R mongodb:mongodb /data/db
创建日志目录
sudo mkdir -p /var/log/mongodb
sudo chown -R mongodb:mongodb /var/log/mongodb
四、macOS系统安装
4.1 使用Homebrew安装
步骤1:安装Homebrew(如果未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
步骤2:安装MongoDB
添加MongoDB Tap
brew tap mongodb/brew
安装MongoDB Community Edition
brew install mongodb-community
4.2 手动安装
下载MongoDB
curl -O https://fastdl.mongodb.org/osx/mongodb-macos-x86_64-7.0.0.tgz
解压
tar -zxvf mongodb-macos-x86_64-7.0.0.tgz
移动到Applications
sudo mv mongodb-macos-x86_64-7.0.0 /usr/local/mongodb
创建符号链接
sudo ln -s /usr/local/mongodb/bin/mongo /usr/local/bin/mongo
sudo ln -s /usr/local/mongodb/bin/mongod /usr/local/bin/mongod
4.3 配置macOS服务
启动MongoDB服务
brew services start mongodb-community
停止MongoDB服务
brew services stop mongodb-community
重启MongoDB服务
brew services restart mongodb-community
五、Docker安装
5.1 拉取MongoDB镜像
拉取最新版本
docker pull mongo:latest
拉取指定版本
docker pull mongo:7.0
5.2 运行MongoDB容器
基本运行
docker run --name mongodb -d -p 27017:27017 mongo:7.0
挂载数据卷
docker run --name mongodb \
-d \
-p 27017:27017 \
-v mongodb_data:/data/db \
mongo:7.0
使用自定义配置
docker run --name mongodb \
-d \
-p 27017:27017 \
-v /path/to/mongod.conf:/etc/mongod.conf \
-v mongodb_data:/data/db \
mongo:7.0 \
mongod --config /etc/mongod.conf
5.3 Docker Compose配置
创建docker-compose.yml文件:
version: '3.8'
services:
mongodb:
image: mongo:7.0
container_name: mongodb
restart: always
ports:
- "27017:27017"
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: password123
volumes: - mongodb_data:/data/db
- ./mongod.conf:/etc/mongod.conf
command: mongod --config /etc/mongod.conf
mongo-express:
image: mongo-express
container_name: mongo-express
restart: always
ports:
- "8081:8081"
environment:
ME_CONFIG_MONGODB_URL: mongodb://admin:password123@mongodb:27017/
ME_CONFIG_BASICAUTH_USERNAME: admin
ME_CONFIG_BASICAUTH_PASSWORD: admin
depends_on: - mongodb
volumes:
mongodb_data:
六、配置与启动
6.1 启动MongoDB
Windows(服务)
net start MongoDB
Windows(手动)
mongod --config "C:\Program Files\MongoDB\Server\7.0\bin\mongod.cfg"
Linux(systemd)
sudo systemctl start mongod
sudo systemctl enable mongod
macOS(brew)
brew services start mongodb-community
Docker
docker start mongodb
6.2 连接MongoDB
使用mongo shell
mongo
连接到指定主机和端口
mongo --host localhost --port 27017
连接到远程服务器
mongo --host 192.168.1.100 --port 27017
使用认证连接
mongo --host localhost --port 27017 -u admin -p password123 --authenticationDatabase admin
6.3 配置文件详解
网络配置
net:
port: 27017 # 监听端口
bindIp: 0.0.0.0 # 绑定IP地址
maxIncomingConnections: 65536
存储配置
storage:
dbPath: /data/db # 数据目录
journal:
enabled: true # 启用日志
wiredTiger:
engineConfig:
cacheSizeGB: 2 # 缓存大小
日志配置
systemLog:
destination: file
path: /var/log/mongodb/mongod.log
logAppend: true
logRotate: true
verbosity: 1
安全配置
security:
authorization: enabled # 启用认证
keyFile: /data/keyfile # 副本集密钥文件
副本集配置
replication:
replSetName: "rs0" # 副本集名称
七、基本操作
7.1 数据库操作
显示所有数据库
show dbs
切换/创建数据库
use mydatabase
删除当前数据库
db.dropDatabase()
显示当前数据库
db
7.2 集合操作
创建集合
db.createCollection("users")
显示所有集合
show collections
删除集合
db.users.drop()
7.3 文档操作
插入文档:
插入单个文档
db.users.insertOne({
name: "张三",
age: 25,
email: "zhangsan@example.com"
})
插入多个文档
db.users.insertMany( {name: "李四", age: 30, email: "lisi@example.com"}, {name: "王五", age: 28, email: "wangwu@example.com"} )
查询文档:
查询所有文档
db.users.find()
查询指定条件
db.users.find({name: "张三"})
查询并格式化输出
db.users.find().pretty()
条件查询
db.users.find({age: {gt: 25}}) # 年龄大于25
db.users.find({age: {gte: 25}}) # 年龄大于等于25
db.users.find({age: {lt: 30}}) # 年龄小于30
db.users.find({age: {lte: 30}}) # 年龄小于等于30
db.users.find({age: {$ne: 25}}) # 年龄不等于25
范围查询
db.users.find({age: {gte: 25, lte: 30}})
正则查询
db.users.find({name: /张/})
更新文档:
更新单个文档
db.users.updateOne(
{name: "张三"},
{$set: {age: 26}}
)
更新多个文档
db.users.updateMany(
{age: {lt: 30}},
{set: {status: "young"}}
)
替换文档
db.users.replaceOne(
{name: "张三"},
{name: "张三", age: 26, email: "new@example.com"}
)
增加字段
db.users.updateOne(
{name: "张三"},
{$set: {phone: "13800138000"}}
)
删除字段
db.users.updateOne(
{name: "张三"},
{$unset: {phone: 1}}
)
删除文档:
删除单个文档
db.users.deleteOne({name: "张三"})
删除多个文档
db.users.deleteMany({age: {$lt: 25}})
删除所有文档
db.users.deleteMany({})
八、用户管理
8.1 创建管理员用户
切换到admin数据库
use admin
创建管理员用户
db.createUser({
user: "admin",
pwd: "admin123",
roles:
{role: "userAdminAnyDatabase", db: "admin"},
{role: "readWriteAnyDatabase", db: "admin"}
})
8.2 创建普通用户
切换到目标数据库
use mydatabase
创建普通用户
db.createUser({
user: "myuser",
pwd: "user123",
roles:
{role: "readWrite", db: "mydatabase"}
})
8.3 用户权限管理
|----------------------|------------------|
| 角色 | 权限 |
| read | 允许读取指定数据库 |
| readWrite | 允许读写指定数据库 |
| dbAdmin | 允许执行数据库管理任务 |
| dbOwner | 数据库所有者,拥有所有权限 |
| userAdmin | 允许在指定数据库中创建和管理用户 |
| readAnyDatabase | 允许读取所有数据库 |
| readWriteAnyDatabase | 允许读写所有数据库 |
| userAdminAnyDatabase | 允许在所有数据库中创建和管理用户 |
| dbAdminAnyDatabase | 允许执行所有数据库的管理任务 |
| root | 超级用户,拥有所有权限 |
8.4 用户管理命令
查看所有用户
use admin
db.system.users.find()
查看当前数据库的用户
db.getUsers()
修改用户密码
db.changeUserPassword("myuser", "newpassword")
删除用户
db.dropUser("myuser")
授予角色
db.grantRolesToUser("myuser", "readWrite")
撤销角色
db.revokeRolesFromUser("myuser", "readWrite")
九、备份与恢复
9.1 数据备份
备份所有数据库
mongodump --host localhost --port 27017 --out /backup/mongodb
备份指定数据库
mongodump --db mydatabase --out /backup/mongodb
备份指定集合
mongodump --db mydatabase --collection users --out /backup/mongodb
使用认证备份
mongodump --host localhost --port 27017 \
--username admin --password admin123 \
--authenticationDatabase admin \
--out /backup/mongodb
压缩备份
mongodump --db mydatabase --gzip --out /backup/mongodb
9.2 数据恢复
恢复所有数据库
mongorestore --host localhost --port 27017 /backup/mongodb
恢复指定数据库
mongorestore --db mydatabase /backup/mongodb/mydatabase
恢复指定集合
mongorestore --db mydatabase --collection users \
/backup/mongodb/mydatabase/users.bson
使用认证恢复
mongorestore --host localhost --port 27017 \
--username admin --password admin123 \
--authenticationDatabase admin \
/backup/mongodb
恢复压缩备份
mongorestore --db mydatabase --gzip /backup/mongodb/mydatabase
9.3 导出导入数据
导出JSON格式
mongoexport --db mydatabase --collection users \
--out users.json
导出CSV格式
mongoexport --db mydatabase --collection users \
--type csv --fields name,age,email \
--out users.csv
导入JSON数据
mongoimport --db mydatabase --collection users \
--file users.json
导入CSV数据
mongoimport --db mydatabase --collection users \
--type csv --headerline --file users.csv
十、常见问题解决
10.1 启动失败
问题:MongoDB服务无法启动
解决方案:
-
检查数据目录权限
-
检查配置文件语法
-
检查端口是否被占用
-
查看日志文件获取详细错误信息
10.2 连接失败
问题:无法连接到MongoDB服务器
解决方案:
-
检查MongoDB服务是否运行
-
检查防火墙设置
-
检查bindIp配置
-
验证用户名和密码
10.3 性能问题
问题:查询速度慢
解决方案:
-
创建合适的索引
-
使用explain()分析查询
-
优化查询语句
-
增加服务器内存
-
使用分片水平扩展
附录:常用命令参考
A.1 数据库命令
|-------------------|-----------|
| 命令 | 说明 |
| show dbs | 显示所有数据库 |
| use dbname | 切换/创建数据库 |
| db.dropDatabase() | 删除当前数据库 |
| db.stats() | 显示数据库统计信息 |
A.2 集合命令
|---------------------------|----------|
| 命令 | 说明 |
| show collections | 显示所有集合 |
| db.createCollection(name) | 创建集合 |
| db.collection.drop() | 删除集合 |
| db.collection.stats() | 显示集合统计信息 |
A.3 文档命令
|-----------------------------------------|--------|
| 命令 | 说明 |
| db.collection.insertOne(doc) | 插入单个文档 |
| db.collection.insertMany(docs) | 插入多个文档 |
| db.collection.find(query) | 查询文档 |
| db.collection.updateOne(query, update) | 更新单个文档 |
| db.collection.updateMany(query, update) | 更新多个文档 |
| db.collection.deleteOne(query) | 删除单个文档 |
| db.collection.deleteMany(query) | 删除多个文档 |
A.4 索引命令
|----------------------------------------|--------|
| 命令 | 说明 |
| db.collection.createIndex({field: 1}) | 创建升序索引 |
| db.collection.createIndex({field: -1}) | 创建降序索引 |
| db.collection.getIndexes() | 查看所有索引 |
| db.collection.dropIndex(name) | 删除指定索引 |
| db.collection.dropIndexes() | 删除所有索引 |
十一、安装文件已上传,地址: