2011-12-19 46 views
24

32位的Windows XP計算機上蒙戈2.0.1蒙戈shell腳本不會讓我包括通過輸入以下2個shell命令 「使用<database>」

//script filename: test.js (one line shell script file to store a person) 
db.cTest.save({Name: "Fred", Age:21}); 

對數據庫dbTest運行:

> use dbTest 
    switched to dbTest 
    > load("test.js") 

到目前爲止,這麼好。

但是,如果我嘗試包括失敗的腳本「使用」的語句:

//script filename: test.js (including "use" statement) 
use dbTest; 
db.cTest.save({Name: "Fred", Age:21}); 

失敗,錯誤味精如下:

> load("test.js") 
    SyntaxError: missing ; before statement 
    Mon Dec 19 11:56:31: Error: error loading js file temp.js (shell):1 

添加或刪除分號test.js似乎並不重要。

那麼如何將「use」指令放入mongo shell腳本中?

回答

12

http://www.mongodb.org/display/DOCS/Scripting+the+shell

使用DBNAME
此命令不會在腳本模式下工作。相反,您需要在連接中顯式定義數據庫(上例中的/ dbname)。

或者,你也可以創建腳本中的連接:

DB2 =連接( 「服務器:27017/otherdbname」)

+1

下面的答案是正確的。有關交互式和腳本JS之間區別的概述:https://docs.mongodb.com/manual/tutorial/write-scripts-for-the-mongo-shell/#differences-between-interactive-and-scripted-mongo – Rmatt 2016-08-29 16:25:43

13

那麼,它仍然是不幸的是,「負載(「文件.js')「和」mongo file.js「實際上不使用與交互式mongo shell相同的腳本解釋器。在腳本中明確打開連接可能違反了DRY原則,因爲mongo已經知道這些信息。這是什麼工作,不過,是該文件管道進入蒙戈,而不是通過其名稱在命令行上:

mongo <file.js 
+0

這個正常工作,謝謝 – 2012-12-15 09:56:17

38

在蒙戈腳本,你可以使用db.getSiblingDB('new_db_name')得到一個新的數據庫的一個參考。所以,它不是必須在命令行中提供數據庫名稱。您可以使用script.js

db = db.getSiblingDB('new_db_name'); 
print(db); 

// the rest of your code for database "new_db_name" 

和這個腳本的輸出(調用與mongo script.js):

MongoDB shell version: 2.2.2 
connecting to: test 
sag 
+0

謝謝!超級有用 – devshorts 2014-08-14 22:25:06

+0

當你想從mongo shell中編寫一個快速腳本或函數時,這非常完美。切換數據庫的關鍵是db = db.getSiblingDB('new_db_name'); – 2015-05-14 07:55:40