開始使用mongodb

開始使用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 }
相關文章
相關標籤/搜索