2016-08-12 90 views
0

我正在尝试执行以下操作。我想在命令行上的电子邮件地址通过使用--eval:mongodb - 如何在命令行上正确传递参数

mongo --eval "var [email protected]" userfind.js

其中userfind.js

use dev; 
db.users.find({email:"emailparam"}).pretty(); 

得到以下错误:

$ mongo --eval "var [email protected]" userfind.js MongoDB shell version: 3.2.4 connecting to: test 2016-08-12T07:02:27.033-0700 E QUERY [thread1] SyntaxError: illegal character @(shell eval):1:25

**从上面的输出中,我也不能使用0123切换到我的数据库。

我试图逃逸,以及和没有运气:

$ mongo --eval "var emailparam=foo.bar\@yahoo.com" userfind.js

有没有办法做到这一点?

回答

1

看看Write Scripts for the mongo shell。第一个问题是,你不能在你的js文件做use dev;,你需要添加到您的js文件:

db = db.getSiblingDB('dev') 

OR你可以留下你的剧本,只是通过DB名称作为位置参数为您蒙戈外壳的执行部分:

mongo dev --eval "var emailparam='[email protected]'" userfind.js 

此外,您在您的js文件的报价有emailparam,它不应该是加引号。当你打电话给mongo shell时,你需要引用变量值,你需要使用\"来转义,或者为变量值使用单引号。

最后但并非最不重要的,你需要遍历光标您的js文件中,蒙戈外壳自动为您完成此,而是通过一个脚本执行时,您需要手动完成。 (这也在上面提供的文档链接中描述)。

userfind.js

db = db.getSiblingDB('dev') 
cursor = db.users.find({email:emailparam}); 
while (cursor.hasNext()) { 
    printjson(cursor.next()); 
} 

,并呼吁:

mongo --eval "var emailparam='[email protected]'" userfind.js