如何在mongoexport查询中指定参数值?脚本无输出求助
解决mongoexport查询中Bash变量无法替换的问题
你遇到的问题核心在于Bash中单引号的特性:单引号包裹的内容会被原样输出,不会解析其中的变量(比如$ID),所以MongoDB收到的查询条件是{Id:{$eq:"$ID"}},而不是你实际传入的ID值,自然查不到数据啦。
下面给你两种可行的解决方案:
方案1:拼接单引号和双引号拆分变量
把变量$ID用双引号包裹,其余查询部分用单引号,通过Bash的字符串拼接来实现变量替换:
#!/bin/bash ID=$1 mongoexport -u test -p test --authenticationDatabase admin -d test -c test -q '{Id:{$eq:"'"$ID"'"}}' -o test.json
解释:这里'"$ID"'的意思是,先关闭单引号,用双引号解析变量$ID,然后再打开单引号,这样最终拼接出来的查询字符串里,$ID会被替换成实际传入的参数值。
方案2:使用双引号包裹整个查询并转义内部双引号
如果习惯用双引号包裹整个查询语句,需要把查询里的双引号转义(用\),这样Bash会先解析变量,同时MongoDB能识别正确的JSON格式:
#!/bin/bash ID=$1 mongoexport -u test -p test --authenticationDatabase admin -d test -c test -q "{Id:{\$eq:\"$ID\"}}" -o test.json
注意:这里的$eq前面要加\转义,否则Bash会把它当成变量解析(虽然$eq不是定义过的变量,但转义更稳妥);同时内部的双引号"也要用\"转义,避免提前结束外层的双引号。
验证方法
你可以先在脚本里加一行echo '{Id:{$eq:"'"$ID"'"}}',运行脚本时传入参数,看看输出的查询字符串是否正确,比如:
./your_script.sh 123
如果输出是{Id:{$eq:"123"}},说明变量替换成功了,再去运行mongoexport就没问题啦。
内容的提问来源于stack exchange,提问作者Sudhir Shekhsaria
相关产品推荐
相关产品推荐

