程式扎記: [ MongoDB 教學 ] Overview - The MongoDB Interactive Shell

標籤

2012年6月5日 星期二

[ MongoDB 教學 ] Overview - The MongoDB Interactive Shell


來源自 這裡
Running the Shell :
在裝完 MongoDB 後, 可以直接在命令列輸入 "mongo" 進入 interactive shell. 如果沒有給任何參數, 預設會連接 local 的 MongoDB database 名稱為 "test", 使用 port 為 27017. 你可以使用命令 db 來檢視目前開啟的 database :
$ mongo
MongoDB shell version: 2.0.5
connecting to: test
> db
test # 使用 database "test"

事實上你可以使用參數決定如何連接與連接哪個 MongoDB database :


另外你可以在你的 HOME directory 下建立一個檔案 ".mongorc.js" 來客製 mongo 的 interactive shell ; 也就是說它會在開啟 interactive shell 前就執行 (如果該檔案存在的話.). 接著我們測試在家目錄下建立 ".mongorc.js" 內容如下 :
  1. var name = 'john'  
  2.   
  3. function sum(x, y) {  
  4.         return x + y  
  5. }  
上面定義了一個變數 "name" 與建立一個函數 sum(). 接著進入 interactive shell :
$ mongo
MongoDB shell version: 2.0.5
connecting to: test
> name # 檢視變數 name 的值.
john
> sum(1, 3)
4

Operations :
底下針對在 interactive shell 中常用的函數進行介紹.

- Help
透過物件上的 help 可以檢視該物件上提供的方法 :
> help // top level help
> db.help() // help on db-specific methods
> db.mycollection.help() // help on collection methods
> db.mycollection.find().help() // cursor help

- Select Database
底下的方法讓你可以檢視 database 的使用狀況, 切換 database 與檢視目前 database 包含的 collections :


- Querying
mongo 使用 JavaScript 語法來與 database 進行溝通. 因為 mongo 也是 JavaScript shell, 而變數 db 代表著與目前 database 的連線. 而要對 collection="tutorial_query" 進行查詢, 你可以使用 db.tutorial_query.find() 進行查詢 :
> db.tutorial_query.find() # This will display the first 10 objects from the "tutorial_query" collection
{ "_id" : ObjectId("4fc97235edeb2cbf879bd9a2"), "name" : "john", "age" : 31, "hobby" : [ "Hike", "Baseball" ] }
{ "_id" : ObjectId("4fc97235edeb2cbf879bd9a3"), "name" : "peter", "age" : 23, "hobby" : [ "Tennis", "PingPong" ] }

Note. 
透過設定 shellBatchSize 可以讓你設定一次顯示的筆數 ; 如果有多筆可以輸入 "it" 顯示下個 round 的資料 :


另外如果你的 Collection 名稱為 數字 或 空白 開頭, 也可以使用下面方式進行查詢 :
> db['tutorial'].find()
{ "_id" : ObjectId("4fceb164c28f5aa5834bab98"), "number" : 1 }
{ "_id" : ObjectId("4fceb164c28f5aa5834bab99"), "number" : 2 }
{ "_id" : ObjectId("4fceb164c28f5aa5834bab9a"), "number" : 3 }
...(略)...

- Inserting
如果要插入數據到 database, 你可以透過 save() 函數將已經建立好的 JavaScript object 輕鬆存入 Collection :
> db.foo.save({name: "john"}) # 如果 Collection "foo" 事先不存在, mongo 會自動幫你加入.
> db.foo.find()
{ "_id" : ObjectId("4fceb60d5f4444bc7472312a"), "name" : "john" }

- Updating
如果你要更新已經存在於 Collection 的 document, 你可以參考下面步驟 :
> person = db.foo.findOne({name: 'john'}) # 在 Collection='foo' 中找出 name='john' 的 document. 
{ "_id" : ObjectId("4fceb60d5f4444bc7472312a"), "name" : "john" }
> person.city = "Taipei"
> db.foo.save(person)
> db.foo.find()
{ "_id" : ObjectId("4fceb60d5f4444bc7472312a"), "name" : "john", "city" : "Taipei" }

- Indexes
MongoDB 預設會使用 Field "_id" 做 index. 下面是對 index 常見方法 :


檢視目前 Collection "foo" 的 index :
> db.foo.getIndexKeys()
[ { "_id" : 1 } ]

- Open Additional Connections
你可以透過下面在 script 中建立與 MongoDB 的 Connection :
  1. conn = new Mongo(host);  
  2. db = conn.getDB(dbname);  
  3. db.auth(username,password);  
Note.
where host is a string that contains either the name or address of the machine you want to connect to (e.g. "192.168.13.7") or the machine and port (e.g. "192.168.13.7:9999"). Note that host in an optional argument, and can be omitted if you want to connect to the database instance running on your local machine. (e.g. conn = new Mongo() )

或者在 interactive shell 中如下建立 :
> db = connect("localhost:27020/mytestdb"); // example with a nonstandard port #

Working from the Prompt :
除了可以在 interactive shell 中執行內建的 script, 你也可以在裡面撰寫自己的 script.

- Line Continuation
在撰寫 script 時, 如果是 "{" , 或是 "(" 結尾, 則下一行會出現 "..." 說明代碼尚未完成, 會等到對應的 "}" 或是 ")" 才開始 script 的 evaluation :
> function f() {
... x = 1;
... }
>

- Key Shortcuts
* up/down array for command history
* in v1.9+ some basic emacs keystrokes work
* ctrl-l to clear the screen
* tab for auto-complete (newer versions only)
* ctrl-c to exit
* Enter twice to break out of line continuation mode

Some Notes on Datatypes in the Shell :
底下對 MongoDB 中的某些 資料格式 進行說明 :
- Numbers
預設在 shell 將 numbers 視為 floating-point. 你可以使用 NumberLong() 來使用 64 bit 整數. 底下為簡單案例 :
doc = { field: new NumberLong("123212313")}

- Dates
使用函數 Date() 會返回一個代表時間的字串 ; 使用 "new Date()" 會返回一個代表目前時間的物件 :
> Date()
Tue Jun 05 2012 19:15:39 GMT-0700 (PDT)
> new Date()
ISODate("2012-06-06T02:15:51.447Z")
> typeof(new Date())
object
> typeof(Date())
string

- BinData
代表 BSON 的物件為 BinData 類別, 可以執行 help misc 得到更多使用訊息 :
> new BinData(2, "1234")
BinData(2,"1234")

沒有留言:

張貼留言

網誌存檔

關於我自己

我的相片
Where there is a will, there is a way!