mongodb - 如何在命令行

时间:2016-08-12 14:07:43

标签: mongodb

我正在尝试执行以下操作。我想使用--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

有办法做到这一点吗?

1 个答案:

答案 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