# MongoDB安装教程
MongoDB是一个流行的NoSQL文档数据库,本文介绍MongoDB的安装方法。
## 一、MongoDB简介
MongoDB是一个基于文档的NoSQL数据库,主要特点:
- 文档存储:使用BSON格式存储数据
- 灵活的模式:不需要预定义表结构
- 高性能:支持索引和聚合查询
- 水平扩展:支持分片集群
- 丰富的查询语言
## 二、CentOS/RHEL安装
添加MongoDB仓库:
cat > /etc/yum.repos.d/mongodb-org-6.0.repo << EOF
[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc
EOF
安装MongoDB:
yum install -y mongodb-org
启动MongoDB服务:
systemctl start mongod
systemctl enable mongod
systemctl status mongod
## 三、Ubuntu/Debian安装
导入公钥:
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | apt-key add -
添加MongoDB仓库:
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-6.0.list
更新包列表并安装:
apt-get update
apt-get install -y mongodb-org
启动MongoDB服务:
systemctl start mongod
systemctl enable mongod
systemctl status mongod
## 四、Docker安装
拉取MongoDB镜像:
运行MongoDB容器:
docker run -d \
--name mongodb \
-p 27017:27017 \
-v /data/mongodb:/data/db \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=your_password \
mongo:6.0
连接MongoDB:
docker exec -it mongodb mongosh -u admin -p your_password
## 五、配置文件
MongoDB配置文件位置:/etc/mongod.conf
基本配置:
# 网络配置
net:
port: 27017
bindIp: 0.0.0.0
# 存储配置
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
# 日志配置
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# 安全配置
security:
authorization: enabled
重启服务使配置生效:
## 六、创建用户和数据库
连接MongoDB:
创建管理员用户:
use admin
db.createUser({
user: "admin",
pwd: "your_strong_password",
roles: ["userAdminAnyDatabase", "dbAdminAnyDatabase", "readWriteAnyDatabase"]
})
创建应用数据库和用户:
use myapp
db.createUser({
user: "appuser",
pwd: "app_password",
roles: ["readWrite"]
})
## 七、基本操作
插入数据:
use mydb
db.users.insertOne({
name: "张三",
age: 25,
email: "zhangsan@example.com"
})
查询数据:
db.users.find()
db.users.find({age: {$gt: 20}})
更新数据:
db.users.updateOne(
{name: "张三"},
{$set: {age: 26}}
)
删除数据:
db.users.deleteOne({name: "张三"})
## 八、Python客户端
安装PyMongo:
连接MongoDB:
from pymongo import MongoClient
# 连接MongoDB
client = MongoClient(
'mongodb://admin:password@localhost:27017/',
authSource='admin'
)
# 选择数据库
db = client['myapp']
# 插入数据
result = db.users.insert_one({
'name': '李四',
'age': 30
})
# 查询数据
for user in db.users.find():
print(user)
# 更新数据
db.users.update_one(
{'name': '李四'},
{'$set': {'age': 31}}
)
# 删除数据
db.users.delete_one({'name': '李四'})
## 九、Java客户端
添加依赖:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.9.1</version>
</dependency>
连接MongoDB:
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import org.bson.Document;
// 连接MongoDB
MongoClient mongoClient = MongoClients.create(
"mongodb://admin:password@localhost:27017/?authSource=admin"
);
// 选择数据库
MongoDatabase database = mongoClient.getDatabase("myapp");
// 获取集合
MongoCollection<Document> collection = database.getCollection("users");
// 插入数据
Document document = new Document("name", "王五")
.append("age", 28);
collection.insertOne(document);
// 查询数据
for (Document doc : collection.find()) {
System.out.println(doc.toJson());
}
// 关闭连接
mongoClient.close();
## 十、Go客户端
安装驱动:
go get go.mongodb.org/mongo-driver/mongo
连接MongoDB:
package main
import (
"context"
"fmt"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
type User struct {
Name string `bson:"name"`
Age int `bson:"age"`
}
func main() {
// 连接MongoDB
clientOptions := options.Client().ApplyURI(
"mongodb://admin:password@localhost:27017/?authSource=admin",
)
client, _ := mongo.Connect(context.TODO(), clientOptions)
defer client.Disconnect(context.TODO())
// 选择数据库和集合
collection := client.Database("myapp").Collection("users")
// 插入数据
user := User{Name: "赵六", Age: 35}
collection.InsertOne(context.TODO(), user)
// 查询数据
cursor, _ := collection.Find(context.TODO(), nil)
var results []User
cursor.All(context.TODO(), &results)
for _, result := range results {
fmt.Println(result.Name, result.Age)
}
}
## 十一、备份与恢复
备份数据库:
mongodump --host localhost --port 27017 \
--username admin --password your_password \
--authenticationDatabase admin \
--db myapp --out /backup/mongodb
恢复数据库:
mongorestore --host localhost --port 27017 \
--username admin --password your_password \
--authenticationDatabase admin \
--db myapp /backup/mongodb/myapp
## 十二、监控与维护
查看MongoDB状态:
mongosh --eval "db.serverStatus()"
查看数据库统计:
mongosh --eval "db.stats()"
查看集合统计:
mongosh --eval "db.users.stats()"
查看当前操作:
mongosh --eval "db.currentOp()"
## 十三、性能优化
创建索引:
db.users.createIndex({name: 1})
db.users.createIndex({email: 1}, {unique: true})
db.users.createIndex({age: 1, name: 1})
查看索引:
分析查询:
db.users.find({age: {$gt: 20}}).explain("executionStats")
## 十四、安全建议
1. 启用认证:在配置文件中设置security.authorization
2. 使用强密码:为所有用户设置复杂密码
3. 网络隔离:使用防火墙限制访问
4. SSL/TLS加密:生产环境启用SSL
5. 定期备份:建立完善的备份策略
6. 权限最小化:为不同应用创建独立用户
## 十五、常见问题
MongoDB无法启动:
# 检查配置文件
mongod --config /etc/mongod.conf --fork
# 查看日志
tail -f /var/log/mongodb/mongod.log
# 检查端口占用
netstat -tlnp | grep 27017
连接失败:
# 检查防火墙
firewall-cmd --add-port=27017/tcp --permanent
firewall-cmd --reload
# 检查MongoDB状态
systemctl status mongod
性能问题:
# 检查慢查询
mongosh --eval "db.setProfilingLevel(1)"
mongosh --eval "db.system.profile.find().sort({millis: -1}).limit(10)"
# 检查索引使用情况
mongosh --eval "db.users.aggregate([{$indexStats: {}}])"
## 总结
MongoDB是一个功能强大的NoSQL数据库,安装简单,使用方便。通过本文的介绍,你可以快速搭建MongoDB环境,并进行基本的开发操作。
记住:在生产环境中,务必做好安全配置和备份策略!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。