日期:2014年12月27日 周六
信息收集
MongoDB: The Definitive Guide 的豆瓣主頁
Mongodb官方文檔
- 評價都是來自中文版,看了看價格,40刀確實是貴了喧半,默默的準備下載免費的PDF吧徽曲,中英對照著看涧狮。
- 評論提及官方文檔似乎更好。
- 該書適合入門取董,對應另外一本《mongoDB 50 tips》偏設計多些。
- 比對其他書籍的目錄和評論發(fā)現(xiàn)自己入門把官方文檔看一遍就差不多了无宿。有更加深的需求在細致地進行學習茵汰。
MongoDB簡介
MongoDB是開源的文檔型數(shù)據(jù)庫數(shù),每條記錄對應一個文檔孽鸡,文檔類似于JSON的數(shù)據(jù)格式組織在一起蹂午,文檔型數(shù)據(jù)庫數(shù)的幾個有點:
- 文檔格式能夠響應多種編程語言。
- 嵌套的文檔減少了昂貴的join導致的開銷彬碱。
- Dynamic schema supports fluent polymorphism 豆胸?
MongoDB的關鍵特性(牛皮輕吹~)
- 高性能
- 高可用性
- 可伸縮性
安裝
在Mac下安裝MongoDB有兩種方法,如下介紹通過OS X package manager Homebrew安裝的步驟:
$ brew update
$ brew install mongodb
開始使用
以下部分介紹使用mongo shell做基本的數(shù)據(jù)庫操作巷疼, mongo標準的MongoDB發(fā)布的一部分晚胡,它提供了一個特性完全的JavaScript環(huán)境以及所有MongoDB的接口。
連接數(shù)據(jù)庫
簡單地通過
mongod
我們啟動了MongoDB嚼沿,通過mongo
我們連接到了MongoDB的server估盘。啟動以后,默認使用名為 test 的數(shù)據(jù)庫骡尽;通過
db
可以查看當前所在數(shù)據(jù)庫忿檩;通過show dbs
會展示所有的數(shù)據(jù)庫;通過use mydb
可以切換到對應數(shù)據(jù)庫爆阶;mydb不存在燥透,use mydb
也能成功(通過db查看的結果是mydb),但是show dbs命令的結果中不包含mydb辨图,因為mydb要在插入數(shù)據(jù)以后才會被真正創(chuàng)建班套。通過
help
可以查看幫助; 甚至你可以通過后面添加.help()
查看方法對象的使用故河。
創(chuàng)建集合和插入文檔
在下面的例子中吱韭,我們使用數(shù)據(jù)庫mydb,插入文檔到一個新的集合testData。
當集合第一次被使用的時候理盆,MongoDB會隱式地創(chuàng)建它痘煤,因此在插入數(shù)據(jù)之前你無需創(chuàng)建它,并且因為MongoDB使用的動態(tài)的表猿规,在插入問的那個之前你不需要提前定義好文檔結構衷快。
- 確保使用是mydb,不是的話切換到mydb
- 創(chuàng)建兩個文檔
j = { name : "mongo" }
k = { x : 3 } - 插入文檔到集合中
db.testData.insert( j )
db.testData.insert( k ) - 查看集合是否生成
show collections
- 查看結合中的文檔
db.testData.find()
{ "_id" : ObjectId("549d5a4c341aee5d3faa5c77"), "name" : "mongo" }
{ "_id" : ObjectId("549d5a50341aee5d3faa5c78"), "x" : 3 }
所有的 MongoDB 文檔必須有唯一的 _id值姨俩,mongo在插入文檔到集合的時候會自動創(chuàng)建這么一個唯一的ObjectId作為_id的值蘸拔。
使用for循環(huán)插入文檔
在mongo shell中通過執(zhí)行如下代碼可以批量插入一定數(shù)量的假數(shù)據(jù):
for (var i = 1; i <= 25; i++) {
db.testData.insert( { x : i } )
}
通過db.testData.find()
只能顯示前20條數(shù)據(jù),find()會返回游標cursor环葵,在shell中鍵入下it
會將剩余的數(shù)據(jù)都顯示出來调窍。
使用JavaScript方法插入文檔
也可以在~/.mongorc.js中插入JavaScript方法:
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());
}
然后再在shell中執(zhí)行:
insertData("mydb", "testData", 400)
使用游標
- 使用循環(huán)+游標來遍歷集
var c = db.testData.find()
while ( c.hasNext() ) printjson( c.next() )
- 使用游標做數(shù)組操作
var c = db.testData.find()
printjson( c [ 4 ] )
- 查詢特殊的文檔
db.testData.find( { x : 18 } )
- 返回一個文檔(不同于find會返回包含所有結果的游標)
db.testData.findOne()
- 限制返回文檔的條數(shù)
db.testData.find().limit(3)