将bash shell变量传递给mongo shell命令

时间:2014-11-11 21:54:03

标签: bash mongodb

我正在尝试执行一个bash shell,它使用动态创建的命令调用mongo shell。 bash shell看起来像这样:

#!/bin/bash

TODAY=`date '+%Y-%m-%d'`

CMD=" 'printjson(db.collection.aggregate([{$match:{processedtime:{$gte:\"$TODAY"}}},{$project:{_id:$field",count:{$sum:1}}}]))'"

echo "CMD: $CMD"

mongo host/mdb --eval $CMD

请注意,集合中的processedtime字段是格式化为ISODate对象的sting值。

当作为bash shell执行时,我收到“意外的令牌ILLEGAL”错误。如果我执行回显到屏幕的命令,我会得到所需的结果。

我的问题是,有没有办法将shell定义的变量传递到mongo shell中,如果有什么需要更改来执行此操作?

1 个答案:

答案 0 :(得分:2)

你注意逃避了,我相信你不想要文字单引号:

CMD="printjson(db.collection.aggregate([{\$match:{processedtime:{\$gte:\"$TODAY\"}}},{\$project:{_id:\$field",count:{\$sum:1}}}]))"
# ...^.. single quote unneeded ..........^.......................^.....^.......&......^..............^...............^............^
mongo host/mdb --eval "$CMD"
# ....................^....^  crucial double quotes here