mongodb - 使用逗号分隔的 bash 变量运行 for 循环
问题描述
我有一个集合列表作为逗号分隔变量,Bash
如下所示
list_collection=$collection_1,$collection_2,$collection_2,$collection_4
我想连接到Mongodb
这些集合并在这些集合上运行一些命令,如下所示,但我没有让循环工作
${Mongo_Home}/mongo ${mongo_host}/${mongo_db} -u ${mongo_user} -p ${mongo_password} <<EOF
use ${mongo_db};for i in ${list_collection//,/ }
do
db.${i}.reIndex();
db.${i}.createIndex({
"recon_type":1.0,
"account_name":1.0,
"currency":1.0,
"funds":1.0,
"recon_status":1.0,
"transaction_date":1.0},
{name:"index_def"});
if [ $? -ne 0 ] ; then
echo "Mongo Query to reindex ${i} failed"
exit 200
fi
done
EOF
我在做什么错?
正确的方法是什么?
解决方案
很难从一堆没有表现出该行为的代码中猜出您想要mongo
的行为是什么,但为了试一试,以下内容将在每个项目中运行一次,每次list_collection
使用不同的heredoc:
#!/usr/bin/env bash
# read your string into a single array
IFS=, read -r -a listItems <<<"$list_collection"
# iterate over items in that array
for i in "${listItems[@]}"; do
{ # this brace group lets the redirection apply to the whole complex command
"${Mongo_Home}/mongo" "${mongo_host}/${mongo_db}" \
-u "${mongo_user}" -p "${mongo_password}" ||
{ echo "Mongo query to reindex $i failed" >&2; exit 200; }
} <<EOF
use ${mongo_db};
db.${i}.reIndex();
db.${i}.createIndex({
"recon_type":1.0,
"account_name":1.0,
"currency":1.0,
"funds":1.0,
"recon_status":1.0,
"transaction_date":1.0
}, {name:"index_def"});
EOF
done
或者,只运行mongo
一次(但无法判断发生故障的索引)可能如下所示:
#!/usr/bin/env bash
# read your string into a single array
IFS=, read -r -a listItems <<<"$list_collection"
buildMongoCommand() {
printf '%s\n' "use $mongo_db;"
for i in "${listItems[@]}"; do
cat <<EOF
db.${i}.reIndex();
db.${i}.createIndex({
"recon_type":1.0,
"account_name":1.0,
"currency":1.0,
"funds":1.0,
"recon_status":1.0,
"transaction_date":1.0
}, {name:"index_def"});
EOF
done
}
"${Mongo_Home}/mongo" "${mongo_host}/${mongo_db}" \
-u "${mongo_user}" -p "${mongo_password}" \
< <(buildMongoCommand) \
|| { echo "Mongo query failed" >&2; exit 200; }
推荐阅读
- python-3.x - 当同时存在白色和黑色背景时,如何将整个图像的背景转换为白色?
- c# - 使用特定文化调用 DateTime 的 ToString 方法
- math - 如何在 3d 空间中旋转矢量?坐标系不是全局 xyz。我有坐标系每个轴的向量
- math - 给定一个排名的人员列表,我怎样才能有效地将他们分成 2 个平衡的团队?
- thrift - 为什么apache thrifts 传输层分为低级传输和传输包装器
- python - 输入列表中不存在中值?
- java - org.springframework.jms.IllegalStateException:会话已关闭
- mysql - 如果我向某人或某人向我发送消息,我想显示不同用户的信使等名称,按 id desc 排序
- ios - 具有大量图像的 UITableView
- javascript - 在单个文件中导入所有 vue js 组件