我正在尝试执行以下操作。我想使用--eval:
在命令行上传递一个电子邮件地址 mongo --eval "var emailparam=foo.bar@yahoo.com" userfind.js
userfind.js
:
use dev;
db.users.find({email:"emailparam"}).pretty();
收到以下错误:
$ mongo --eval "var emailparam=foo.bar@yahoo.com" 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
**来自上面的输出,我无法使用dev
切换到我的数据库use dev
。
我也试过逃避而且没有运气:
$ mongo --eval "var emailparam=foo.bar\@yahoo.com" userfind.js
有办法做到这一点吗?
答案 0 :(得分:1)
看看Write Scripts for the mongo shell。第一个问题是您无法在js文件中执行use dev;
,您需要将其添加到您的js文件中:
db = db.getSiblingDB('dev')
OR 您可以将其从脚本中删除,只需将db名称作为执行mongo shell的位置参数传递:
mongo dev --eval "var emailparam='foo.bar@yahoo.com'" userfind.js
此外,您的js文件中的引号为emailparam
,它不应该在引号中。当您调用mongo
shell时,您需要使用\"
引用变量值,或者使用单引号作为变量值。
最后但并非最不重要的是,您需要在js文件中迭代光标,mongo shell会自动为您执行此操作,但您需要在通过脚本执行时手动执行此操作。 (这也在上面提供的文档链接中描述)。
<强> userfind.js 强>
db = db.getSiblingDB('dev')
cursor = db.users.find({email:emailparam});
while ( cursor.hasNext() ) {
printjson( cursor.next() );
}
致电:
mongo --eval "var emailparam='foo.bar@yahoo.com'" userfind.js