Javascript 如何将参数传递给Mongo脚本
我一直在使用mongo和脚本文件,如下所示:Javascript 如何将参数传递给Mongo脚本,javascript,mongodb,scripting,Javascript,Mongodb,Scripting,我一直在使用mongo和脚本文件,如下所示: $ mongo getSimilar.js 我想向文件传递一个参数: $ mongo getSimilar.js apples 然后在脚本文件中获取传入的参数 var arg = $1; print(arg); 您不能这样做,但可以将它们放在另一个脚本中并首先加载: // vars.js msg = "apples"; 而getsimilor.js是: print(msg); 然后: 不过也不太方便。使用--eval并使用shell脚本修
$ mongo getSimilar.js
我想向文件传递一个参数:
$ mongo getSimilar.js apples
然后在脚本文件中获取传入的参数
var arg = $1;
print(arg);
您不能这样做,但可以将它们放在另一个脚本中并首先加载:
// vars.js
msg = "apples";
而getsimilor.js是:
print(msg);
然后:
不过也不太方便。使用--eval
并使用shell脚本修改传入的命令
mongo--eval“print('apples');”
或生成全局变量(归功于Tad Marshall):
设置shell变量:
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
我使用shell脚本将mongo命令传递到mongo。在mongo命令中,我使用了传递给shell脚本的arg(即,我使用了
$1
):
我自己写了一个小实用程序来解决这个问题。使用
mongoexec
实用程序,您可以通过在脚本开头添加以下内容来运行命令/getsimilor.js
:
#!/usr/bin/mongoexec --quiet
在脚本中,您可以访问参数作为args[0]
我通过使用javascript捆绑包解决了这个问题: 这样,可以在脚本中使用节点环境变量,如:
var collection = process.env.COLLECTION;
使用地块构建时,环境变量将内联:
parcel build ./src/index.js --no-source-maps
唯一的缺点是,每次更改环境变量时都必须重新生成脚本。但是,由于parcel的速度非常快,这并不是一个真正的问题。这不适用于mapreduce,reduce()函数无法访问参数(ReferenceError:…未在附近定义…)--eval非常有用。假设我们希望在复制集中快速将辅助更改为主。使用脚本
conf=rs.conf()conf.members.forEach(函数(成员){member.priority=0.5})conf.members[memberId].priority=1//rs.reconfig(conf)
将此脚本保存在chooseprimary.js中,并使用mongo--eval“var memberId=3”chooseprimary.js运行。memberId应该是您希望成为主要成员的次要成员的id。只需确保在主服务器上执行mongo--eval.:)太棒了,谢谢你的信息!我有一些脚本将有点难以--eval
。这不适用于2.4。你能指出文档或在此基础上展开吗?不起作用;我被拒绝访问sudo
不起作用。将shebang更改为指向位于用户目录(而不是/usr/bin)中的可执行文件不起作用。我很兴奋能使用它。但愿我能让它工作。@Bear指令没有提到脚本必须是可执行的。如果您运行“sudo chmod+rx/usr/bin/mongoexec”,它应该可以工作。这不应该是find({\“\u id\”:ObjectId(\“$objId\”)}
?或者有没有一种方法可以设置mongo,这样就不必使用ObjectId()
guy?
#!/bin/sh
objId=$1
EVAL="db.account.find({\"_id\" : \"$objId\"})"
echo $EVAL | mongo localhost:27718/balance_mgmt --quiet
#!/usr/bin/mongoexec --quiet
var collection = process.env.COLLECTION;
parcel build ./src/index.js --no-source-maps