我一直在使用像这样的mongo和脚本文件:
$ mongo getSimilar.js
我想将参数传递给文件:
$ mongo getSimilar.js apples
然后在脚本文件中选取传入的参数。
var arg = $1;
print(arg);
答案 0 :(得分:97)
使用--eval
并使用shell脚本来修改传入的命令。
mongo --eval "print('apples');"
或制作全局变量(归功于Tad Marshall):
$ cat addthem.js
printjson( param1 + param2 );
$ ./mongo --nodb --quiet --eval "var param1=7, param2=8" addthem.js
15
答案 1 :(得分:19)
你不能这样做,但是你可以将它们放在另一个脚本中并首先加载它:
// vars.js
msg = "apples";
和getSimilar.js是:
print(msg);
然后:
$ mongo vars.js getSimilar.js
MongoDB shell version: blah
connecting to: test
loading file: vars.js
loading file: getSimilar.js
apples
不太方便。
答案 2 :(得分:2)
设置shell var:
password='bladiebla'
创建js脚本:
cat <<EOT > mongo-create-user.js
print('drop user admin');
db.dropUser('admin');
db.createUser({
user: 'admin',
pwd: '${password}',
roles: [ 'readWrite']
});
EOT
将脚本传递给mongo:
mongo mongo-create-user.js
答案 3 :(得分:1)
我使用shell脚本将mongo命令传递给mongo。在mongo命令中,我使用了一个传递给shell脚本的arg(即我使用$1
):
#!/bin/sh
objId=$1
EVAL="db.account.find({\"_id\" : \"$objId\"})"
echo $EVAL | mongo localhost:27718/balance_mgmt --quiet
答案 4 :(得分:0)
我写了一个小工具来解决我自己的问题。使用mongoexec
实用程序,您可以通过将以下内容添加到脚本的开头来运行命令./getSimilar.js apples
:
#!/usr/bin/mongoexec --quiet
在脚本中,您可以访问参数args[0]
。
答案 5 :(得分:0)
我通过使用javascript捆绑程序包https://parceljs.org/
解决了这个问题这样,就可以在脚本中使用节点环境变量,例如:
var collection = process.env.COLLECTION;
使用宗地进行构建时,env var会被内联:
parcel build ./src/index.js --no-source-maps
唯一的缺点是,每次要更改环境变量时,都必须重新构建脚本。但是由于包裹的速度非常快,所以恕我直言,这并不是问题。