2016-08-12 60 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