開始使用mongodb mongo是mongodb的shell,提供了一個完整的javascripts環境。 1. 鏈接數據庫 1.1 鏈接一個數據庫 鏈接一個已經運行mongod的數據庫服務器。 進入mongodb提示符 mongo 默認mongodb服務監聽localhost的27017端口,能夠經過--host和--port改變配置。 顯示當前正在鏈接的數據庫 db 顯示數據庫列表 show dbs 切換數據庫 use mydb 若是沒有爲一個庫插入數據,mongodb不會建立這個庫 1.2 使用mongo的幫助信息 help 能夠把.help()加在一個js方法的後面,好比加在db和db.collection對象後面,能夠返回幫助信息。 2. 建立一個表並插入數據 mongodb將會在第一次使用一個表前建立它,這意味着不須要在插入數據前建立集合。 mongodb使用動態結構,因此也不須要在插入前指定文檔的結構。 進入指定數據庫 use mydb 建立兩個以js序列做爲格式的文檔 j = { name : "mongo"} k = { x :3} 將其插入testData集合 db.testData.insert(j) db.testData.insert(k) 當第一次插入的時候,mongod將會自動建立testData集合和mydb數據庫。 查看testData確實存在 show collections 將會返回當前庫的文檔列表。 全部的mongod庫也都包含一個system.indexes的表。 查詢集合中的文檔能夠使用一個使用find()方法的查詢語句: db.testData.find() 操做返回下面的結果,ObjectId是獨一無二的。 { "_id" : ObjectId("5355e2fdd8ea78efc7cbed23"), "name" : "mongo" } { "_id" : ObjectId("5355e300d8ea78efc7cbed24"), "x" : 3 } 全部的mongodb文檔都有一個_id域做爲惟一值。 若是操做沒有指定_id的值,mongo將會在插入前自動建立一個惟一的ObjectId。 3. 利用一個js的循環插入mongodb文檔 3.1 利用一個循環插入多個文檔 for (var i = 1; i <= 25; i++) db.testData1.insert( { x : i } ) db.testData1.find() mongo shell會返回前20個文檔,每一個ObjectId的值是不一樣的 { "_id" : ObjectId("5355e481dde574d12e49be05"), "x" : 1 } { "_id" : ObjectId("5355e481dde574d12e49be06"), "x" : 2 } { "_id" : ObjectId("5355e481dde574d12e49be07"), "x" : 3 } { "_id" : ObjectId("5355e481dde574d12e49be08"), "x" : 4 } { "_id" : ObjectId("5355e481dde574d12e49be09"), "x" : 5 } { "_id" : ObjectId("5355e481dde574d12e49be0a"), "x" : 6 } { "_id" : ObjectId("5355e481dde574d12e49be0b"), "x" : 7 } { "_id" : ObjectId("5355e481dde574d12e49be0c"), "x" : 8 } { "_id" : ObjectId("5355e481dde574d12e49be0d"), "x" : 9 } { "_id" : ObjectId("5355e481dde574d12e49be0e"), "x" : 10 } { "_id" : ObjectId("5355e481dde574d12e49be0f"), "x" : 11 } { "_id" : ObjectId("5355e481dde574d12e49be10"), "x" : 12 } { "_id" : ObjectId("5355e481dde574d12e49be11"), "x" : 13 } { "_id" : ObjectId("5355e481dde574d12e49be12"), "x" : 14 } { "_id" : ObjectId("5355e481dde574d12e49be13"), "x" : 15 } { "_id" : ObjectId("5355e481dde574d12e49be14"), "x" : 16 } { "_id" : ObjectId("5355e481dde574d12e49be15"), "x" : 17 } { "_id" : ObjectId("5355e481dde574d12e49be16"), "x" : 18 } { "_id" : ObjectId("5355e481dde574d12e49be17"), "x" : 19 } { "_id" : ObjectId("5355e481dde574d12e49be18"), "x" : 20 } find()返回的是一個遊標,使用it迭代遊標能夠返回更多的結果,當返回全部結果後,mongodb將會耗盡遊標。 { "_id" : ObjectId("5355e481dde574d12e49be19"), "x" : 21 } { "_id" : ObjectId("5355e481dde574d12e49be1a"), "x" : 22 } { "_id" : ObjectId("5355e481dde574d12e49be1b"), "x" : 23 } { "_id" : ObjectId("5355e481dde574d12e49be1c"), "x" : 24 } 3.2 利用mongo shell函數插入多個文檔 能夠在shell中定義一個函數來生成上面的數據,定義函數名爲InsertData()。 function insertData(dbName, colName, num) { var col = db.getSiblingDB(dbName).getCollection(colName); for (i = 0; i < num; i++) { col.insert({x:i}); } print(col.count()); } insertData函數接受三個參數,數據庫名,表名和記錄的數目。 把這個函數保存在.mongorc.js文件裏,這樣每次mongo shell啓動都會自動加載這個函數。 測試: insertData("mydb", "testData2", 100); 100 上面的操做在mydb庫的testData2集合裏插入了100條文檔。 若是集合和庫不存在,mongodb將會在插入前自動隱式建立它們。 4. 操做遊標 當查詢一個集合,mongodb將會返回一個包含查詢結果的遊標對象。 mongo shell會迭代這個遊標返回結果,每次查詢返回20條記錄,而不是返回全部結果,it能夠返回剩餘的記錄。 用一個循環迭代遊標 在mongodb js shell,查詢testData1集合,並分配結果到變量c: var c = db.testData1.find() 經過while循環迭代變量c返回完整的結果 while ( c.hasNext() ) printjson( c.next() ) 若是遊標有文檔,則hasNext()函數返回true。next()函數返回下一個文檔。 printjson()方法使返回的文檔呈現爲json格式。 返回的文檔會包含ObjectId。 使用數組操做遊標,利用數組索引查找文檔。 printjson( c [ 4 ] ) mongodb返回結果: { "_id" : ObjectId("51a7dc7b2cacf40b79990bea"), "x" : 5 } 當使用數組下標符號訪問遊標文檔時,首先使用cursor.toArray()方法將遊標返回的結果加載到RAM裏, 對於很是大的集合,mongodb可能會超出內存使用量。 5. 查詢指定的文檔 mongodb有豐富的方法進行查詢和過濾。 db.testData1.find( { x : 18 } ) mongodb返回結果: { "_id" : ObjectId("51a7dc7b2cacf40b79990bf7"), "x" : 18 } 返回集合的一個文檔,使用findOne()方法,返回一個文檔而不是遊標。 db.testData1.findOne() 限制結果集返回的數目 使用limit()方法,指定結果集的最大返回條目: db.testData1.find().limit(3) mongodb會返回結果: { "_id" : ObjectId("51a7dc7b2cacf40b79990be6"), "x" : 1 } { "_id" : ObjectId("51a7dc7b2cacf40b79990be7"), "x" : 2 } { "_id" : ObjectId("51a7dc7b2cacf40b79990be8"), "x" : 3 }