如何将参数传递给Mongo Script

时间:2012-04-11 21:36:18

标签: javascript mongodb scripting

我一直在使用像这样的mongo和脚本文件:

$ mongo getSimilar.js

我想将参数传递给文件:

$ mongo getSimilar.js apples

然后在脚本文件中选取传入的参数。

var arg  = $1;
print(arg);

6 个答案:

答案 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]

https://github.com/pveierland/mongoexec

答案 5 :(得分:0)

我通过使用javascript捆绑程序包https://parceljs.org/

解决了这个问题

这样,就可以在脚本中使用节点环境变量,例如:

var collection = process.env.COLLECTION;

使用宗地进行构建时,env var会被内联:

parcel build ./src/index.js --no-source-maps

唯一的缺点是,每次要更改环境变量时,都必须重新构建脚本。但是由于包裹的速度非常快,所以恕我直言,这并不是问题。