我试图使用mongodb脚本和bash的组合来创建一个add用户函数,它看起来如下(Bash)
function addUser {
read -p "email(username): " email
read -p "name: " name
read -p "password: " password
read -p "role (customer/merchant): " role
salt=$(node node/getSalt)
passHash=$(node node/getHash salt password)
export as="var email='$email', hashedPassword='$passHash', role='$role', name='$name', salt='$salt';"
echo $as
mongo --nodb --quiet --eval $as adduser.js
}adduser.js只是一个空脚本,现在我需要把变量放到这个脚本中。
email(username): regre
name: reger
password: ergher
role (customer/merchant): reg
var email='regre', hashedPassword='Vql40+ypE8cVoDw5jPEs0s+YbycG+pzjPVBRMIROJ/+XqiDHc7UD0aZeKY2/enKdSC3V8qMwmLJNc3D67VPHVQ==', role='reg', name='reger', salt='9QgI52o2zgIH8RORVeg1Eg==';
Tue Sep 23 00:39:03.210 SyntaxError: Unexpected end of input脚本呼应了$as的值,它看起来是正确的,但是mongodb脚本似乎无法计算这个表达式。
如何成功地将这个表达式从bash传递到mongodb脚本以进行计算?
当我像这样调用mongo脚本时,没有错误:
mongo --nodb --quiet --eval "var email='regre', hashedPassword='Vql40+ypE8cVoDw5jPEs0s+YbycG+pzjPVBRMIROJ/+XqiDHc7UD0aZeKY2/enKdSC3V8qMwmLJNc3D67VPHVQ==', role='reg', name='reger', salt='9QgI52o2zgIH8RORVeg1Eg==';" adduser.js发布于 2014-09-23 13:48:29
不确定这是否是问题所在,但在脚本上传递mongo的完整路径总是很好的。
在命令行上:
which mongo将脚本上的单词mongo替换为所收到的mongo命令的完整路径。
发布于 2014-09-23 14:32:07
错误就在这里--您没有将任何javascript代码提供给mongo引擎进行评估!--eval后面的值应该是有效的javascript代码。但你提供的只是一些纯文本。
正确的命令是:
mongo --nodb --quiet --eval "db.addUser(userAdditionDocument)"而userAdditionDocument将是:
{ user: "<name>",
pwd: "<cleartext password>",
customData: { <any information> },
roles: [
{ role: "<role>", db: "<database>" } | "<role>",
...
],
writeConcern: { <write concern> }
}正如您可能已经知道的,您只需将整个userAdditionDocument复制到上面的命令,代码就会正常工作。
这个完整的信息是可用的这里。
https://stackoverflow.com/questions/25996483
复制相似问题