如何将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]
访问参数。