在mongodb查询中嵌入bash变量

时间:2016-07-13 09:56:36

标签: bash mongodb

我有一个bash变量$i,它必须嵌入mongo shell查询中才能通过比较日期来获取数据。

i=10
while [  "$i" -lt 12 ]; do
        mongo $MONGO_DATABASE --eval 'printjson(db.mycollection.find({"created_at":{"$lte":ISODate(2016-04-\"$i\"T09:26:31.190Z)}}).toArray())' > $OUTPUT_DIRECTORY/$FILE_NAME  
done

上述实施正在提供i: command not found

1 个答案:

答案 0 :(得分:1)

Shell变量不会在单引号内扩展。使用双引号:

mongo "$MONGO_DATABASE" --eval "printjson...ISODate(2016-04-${i}T09:26:31.190Z)

然后,您需要在您正在评估的字符串中转义双引号的用法,例如: \"created_at\"。您还需要逃避$的其他用法,例如\$lte

或者,您可以在整个命令周围使用单引号,然后使用以下内容:

mongo "$MONGO_DATABASE" --eval 'printjson...ISODate(2016-04-'"$i"'T09:26:31.190Z)

即。关闭单引号,连接shell变量(在双引号内),然后重新打开单引号。