Javascript 如何将参数传递给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和脚本文件,如下所示:

$ 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