70

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

$ mongo getSimilar.js

我想将参数传递给文件:

$ mongo getSimilar.js apples

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

var arg  = $1;
print(arg);
4

7 回答 7

116

使用--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
于 2012-04-11T22:19:52.223 回答
27

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

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

不过,不太方便。

于 2012-04-11T22:05:57.107 回答
2

设置一个外壳变量:

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
于 2015-03-09T11:19:29.987 回答
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
于 2016-02-24T20:01:57.590 回答
0

我通过使用 javascript bundler parcel 解决了这个问题:https ://parceljs.org/

有了这个,可以在脚本中使用节点环境变量,例如:

var collection = process.env.COLLECTION;

使用包裹构建时,env var 被内联:

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

唯一的缺点是,每次要更改环境变量时都必须重新构建脚本。但由于包裹真的很快,这不是一个真正的问题恕我直言。

于 2018-11-08T11:40:18.640 回答
0

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

#!/usr/bin/mongoexec --quiet

在脚本中,您可以将参数作为args[0].

https://github.com/pveierland/mongoexec

于 2017-06-13T22:26:34.170 回答
0

2022年更新:

使用时,mongosh您可以从process.argv

mongosh script.js param1 param2 
// process.argv will be [.... , 'param1', param2']

棘手的一点是mongosh它将尝试将参数(例如param1param2)作为附加脚本执行,但这可以通过使用结束脚本来防止quit()。(TBH,我不确定这是设计/预期/记录的)

于 2022-02-26T05:28:47.973 回答