通过使用 MongoDB 的配置文件或 .mongorc.js
文件来隐藏账号密码,或者使用外部的认证文件方式。以下是一个 优化后的 shell 脚本,采用了 MongoDB 认证配置文件 方式进行账号密码隐藏,并做了脚本结构优化与可读性增强:
✅ 优化点说明:
-
使用
~/.mongoconfig.conf
文件存放认证信息。 -
避免在脚本中直接写密码,提升安全性。
-
加入错误判断,执行日志更清晰。
📄 示例配置文件 ~/.mongoconfig.conf
(仅限当前用户使用):
host=127.0.0.1
port=27017
username=root
password=password
authdb=admin
📌 注意:配置文件应设为 600 权限,防止其他用户读取:
chmod 600 ~/.mongoconfig.conf
🚀 优化后的脚本(rename_collection.sh
):
#!/bin/bash
# Author: Bertram
# Description: 每周自动将 PriceLog 集合重命名,添加日期后缀
CONFIG_FILE="$HOME/.mongoconfig.conf" # MongoDB 认证信息配置文件路径
COLLECTION_NAME="PriceLog" # 需要重命名的集合名称
DB_NAME="Test" # MongoDB 数据库名称
DATE_SUFFIX=$(date +%Y%m%d) # 当前日期作为后缀(格式:YYYYMMDD)
# 加载配置文件中的 MongoDB 连接信息
if [[ -f "$CONFIG_FILE" ]]; then
source "$CONFIG_FILE"
else
echo "[错误] 未找到 MongoDB 配置文件: $CONFIG_FILE"
exit 1
fi
# 执行 MongoDB 重命名集合操作
mongo --quiet --host "$host" --port "$port" -u "$username" -p "$password" --authenticationDatabase "$authdb" <<EOF
use $DB_NAME;
db.$COLLECTION_NAME.renameCollection("${COLLECTION_NAME}_$DATE_SUFFIX");
EOF
# 检查命令执行结果
if [[ $? -eq 0 ]]; then
echo "[信息] 集合 '$COLLECTION_NAME' 已成功重命名为 '${COLLECTION_NAME}_$DATE_SUFFIX'"
else
echo "[错误] 集合重命名失败"
exit 1
fi
🧪 测试建议:
-
先在测试库中跑一遍验证。
-
确认
.mongoconfig.conf
权限和路径正确。 -
设置定时任务前手动执行一次确认逻辑无误。