2016-07-13 48 views
3

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

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

的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变量(双引号),然后重新打开单引号。