bash - 在 mongodb 查询中嵌入 bash 变量

标签 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

最佳答案

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

关于bash - 在 mongodb 查询中嵌入 bash 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38348368/

相关文章:

Bash:将文本 append 到文件的最后一行

linux - Bash if elif 和 else 在我的 linux 脚本中不起作用

bash - 按日期更改嵌套文件结构到文件名

java - 在 Morphia 中向父类(super class)添加 PostLoad 注释

javascript - Mongoose 使用另一个字段(即数组)的项目更新字段

javascript - 在 mongoose 中查找 Id 的所有文档?

ruby - Mongoid 不删除 Mongo 对象

bash - 在 bash 中,为什么 if [ 1 ] 不会失败?

linux - 在 YAML 文件中的特定字符串之后传递变量值

java - Spring Data - MongoDB - 更多与 和 相关的术语