如何将parameter passing给Mongo脚本

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

$ mongo getSimilar.js 

我想传递一个参数给文件:

 $ mongo getSimilar.js apples 

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

 var arg = $1; print(arg); 

使用--eval并使用shell脚本来修改传入的命令。

mongo --eval "print('apples');"

或者让全局variables(信贷给Tad Marshall):

 $ cat addthem.js printjson( param1 + param2 ); $ ./mongo --nodb --quiet --eval "var param1=7, param2=8" addthem.js 15 

你不能这样做,但你可以把它们放在另一个脚本中,并首先加载:

 // 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 

虽然不太方便。

我用了一个shell脚本来把一个mongo命令传给mongo。 在mongo命令中,我使用了一个传递给shell脚本的参数(即我使用$1 ):

 #!/bin/sh objId=$1 EVAL="db.account.find({\"_id\" : \"$objId\"})" echo $EVAL | mongo localhost:27718/balance_mgmt --quiet 

设置一个shell var:

 password='bladiebla' 

创buildjs脚本:

 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 

我写了一个小工具来为自己解决问题。 使用mongoexec实用程序,您可以通过将以下内容添加到脚本的开头来运行命令./getSimilar.js apples

 #!/usr/bin/mongoexec --quiet 

在脚本中,您可以以args[0]访问参数。

https://github.com/pveierland/mongoexec