1. 安装MongoDB
在Debian系统上安装MongoDB,需通过APT包管理器完成。首先更新系统软件包列表,然后添加MongoDB官方GPG密钥和软件源,最后安装mongodb-org包并启动服务。具体命令如下:
sudo apt update && sudo apt upgrade -y
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/debian bullseye/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo apt update
sudo apt install -y mongodb-org
sudo systemctl start mongod
sudo systemctl enable mongod
安装完成后,通过mongo --eval 'db.runCommand({ connectionStatus: 1 })'验证连接状态。
2. 配置MongoDB
配置文件位于/etc/mongod.conf,需调整以下关键参数以优化性能:
bindIp从127.0.0.1改为0.0.0.0(注意安全风险);27017,可根据需求修改;systemLog.path指定日志文件位置(如/var/log/mongodb/mongod.log);WiredTiger(默认),并设置缓存大小(如cacheSizeGB: 4,根据服务器内存调整)。sudo systemctl restart mongod。3. 数据导入
使用mongoimport工具将外部数据(如CSV、JSON)导入MongoDB集合。例如,导入data.csv到mydb数据库的mycollection集合:
mongoimport --db mydb --collection mycollection --type csv --headerline --file data.csv
若数据来自其他数据库(如MySQL),可通过ETL工具(如Apache NiFi)或编程语言(如Python的pymongo)转换后导入。
4. 数据查询与聚合分析
mongo shell或驱动程序执行筛选、排序等操作。例如,查询mycollection中value大于100的记录:db.mycollection.find({ value: { $gt: 100 } }).sort({ timestamp: -1 })
category分组统计平均value:db.mycollection.aggregate([
{ $group: { _id: "$category", avgValue: { $avg: "$value" } } },
{ $sort: { avgValue: -1 } }
])
聚合管道可组合多个阶段(如$match筛选、$group分组、$project投影),实现高级分析。5. 性能优化
timestamp字段创建升序索引:db.mycollection.createIndex({ timestamp: 1 })
explain()分析查询计划;合理使用分页(如limit()和skip())处理大数据集。mongostat(实时监控读写操作)、mongotop(查看热点集合)监控性能;开启慢查询日志(db.setProfilingLevel(2))定位性能瓶颈。6. 结合Python进行深度分析
使用pymongo库连接MongoDB,结合pandas进行数据清洗、转换和可视化。示例代码:
from pymongo import MongoClient
import pandas as pd
import matplotlib.pyplot as plt
# 连接MongoDB
client = MongoClient('mongodb://localhost:27017/')
db = client['mydb']
collection = db['mycollection']
# 查询数据并转为DataFrame
data = list(collection.find({}, {'_id': 0, 'category': 1, 'value': 1}))
df = pd.DataFrame(data)
# 数据分析:按category分组统计平均值
result = df.groupby('category')['value'].mean().reset_index()
# 可视化:绘制柱状图
plt.bar(result['category'], result['value'])
plt.xlabel('Category')
plt.ylabel('Average Value')
plt.title('Category-wise Average Value')
plt.show()
此流程可实现从数据提取到分析、可视化的完整链路。
7. 数据可视化
matplotlib、seaborn绘制静态/动态图表(如折线图、热力图);