[英]Javascript Store as a variable comma separated strings for mongoDB
[英]Run a for loop using a comma separated bash variable
我有一個集合列表作為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
我在做什么錯?
正確的方法是什么?
很難從一堆沒有表現出這種行為的代碼中猜測出您想要的行為是什么,但是要list_collection
,下面的代碼將對list_collection
每個項目運行一次mongo
,每次都使用一個不同的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; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.