2016-07-13 91 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變量(雙引號),然後重新打開單引號。