Mongo 取自列表 bash 脚本的 eval 参数

Mongo eval arguments taken from a list bash script

我正在编写 bash 脚本,并希望使用 for 循环遍历 mongo 中的特定集合并执行计数。如果这些特定集合中的任何一个不为零,则中断循环。

我已经在我的脚本中初始化了这个变量(假设连接正常):

MONGO_EVAL="mongo prod $MONGO_CONN_CONF --quiet --eval"

以及特定集合的列表(在上面初始化,在脚本的早期阶段):

db_collections=(collectionA collectionB collectionC....)

然后遍历 for 循环并计算每个集合中的文档数。

 for str in ${db_collections[@]}; do
   $MONGO_EVAL 'db.$db_collections.count();'
 done

如何正确操作?

应该是这样的:

db_collections=(collectionA collectionB collectionC....)

for str in ${db_collections[@]}; do
    mongo "$MONGO_CONN_CONF" --quiet --eval "db.${str}.count();"
done

for str in ${db_collections[@]}; do
    mongo "$MONGO_CONN_CONF" --quiet --eval "db.getCollection('${str}').count();"
done

mongo "$MONGO_CONN_CONF" --quiet --eval "for (let c of ['collectionA', 'collectionB', 'collectionC']) db.getCollection(c).count();"

注意,必须使用双引号("),否则${str}不会被变量值替换。

关于你的实际问题“如果这些特定集合中的任何一个是non-zero,那么打破循环”如果可能是这样的话:

for (let c of ['collectionA', 'collectionB', 'collectionC']) {
   let count = db.getCollection(c).count();
   if (count > 0) break;
}

请记住,这个循环实际上什么都不做,只是计数并可能退出。我假设您至少还需要 print(c) 或类似的东西。