標籤:
第一章 簡介
MongoDB是面向文檔的資料庫,不是關係型資料庫。內建對MapReduce的支援,以及對地理空間索引的支援。
- 豐富的資料模型
- 容易擴充,它所採用的面向文檔的資料模型可以使其在多台伺服器之間分割資料
- 豐富的功能,索引、儲存Javascript、彙總、固定集合、檔案儲存體
- 不犧牲速度,儘可能地將伺服器端處理邏輯交給用戶端
- 簡便的管理,儘可能地讓伺服器自動設定
第二章 入門
2.1 文檔
文檔是MongoDB的核心概念。
- MongoDB不但區分類型,也區分大小寫。
- 不能有重複的鍵。
- 文檔的鍵是字串,不能含有‘\0’,這個字元用來表示鍵的結尾
- .和$有特別的意義,被保留
- 以底線_開頭的鍵是被保留的
2.2 集合
集合就是一組文檔。
- 在一個集合裡用鍵標註類型,不如將不同類型分到不同的集合裡,這樣查詢會快很多
- 把同種類型的文檔放到一個集合裡,這樣資料會更加集中
- 索引是按照集合來定義的
命名:
- 集合名不能是Null 字元串“”
- 集合名不能含有\0字元(Null 字元)
- 集合名不能以system.開頭
- 使用者建立的集合名不能含有$
推薦使用子集合來組織資料。以“.”分開的按命名空間劃分。
2.3 資料庫
多個集合組成資料庫。資料庫通過名字來標識:
- 不能是Null 字元串
- 不得含有’’、.、$、/、\、和\0
- 應全部小寫
- 最多64位元組
保留資料庫:admin、local、config
2.4 啟動MongoDB
要啟動該服務,需要運行mongod可執行檔。
- 預設路徑/data/db(C:\data\db);連接埠27017
- 啟動HTTP伺服器,監聽數字比主連接埠號碼高1000 。對於預設連接埠,就是28017,可訪問http://localhost:28017 來擷取資料庫管理資訊。
2.5 MongoDB Shell
運行mongo啟動shell。(mongo [host/db: port])
- 功能完備的Javascript解譯器,可以充分利用Javascript標準庫,可以定義和調用Javascript函數,可以使用多行命令。
MongoDB用戶端,全域變數db,用use [db]命令切換資料庫
基本操作
- 建立 db.blog.insert(post)
- 讀取 db.blog.find() | db.blog.findOne()
- 更新 db.blog.update(condition, new)
- 刪除 db.blog.remove(condition)
db.help()可以查看資料庫層級的命令的協助,集合的相關協助可以通過db.foo.help()來查看。
函數名不寫括弧,就會顯示該函數的Javascript源碼。
- 當有屬性和目的地組合約名時(如version),db.version不能返回正確的collection,這時可以使用getCollection函數:db.getCollection(“version”)
- x.y和x[‘y’]完全等價,db.blog.posts也可以寫作db.blog[‘posts’]
var collections = ["posts", "comments", "authors"]for (i in collections) { doStuff(db.blog[collections[i]]);}
2.6 資料類型
基礎資料型別 (Elementary Data Type)、數字、日期(new Date())、數組、內嵌文檔等。
- 盡量不要在Shell下覆蓋整個文檔(整數轉化為浮點數)
_id和ObjectId
- ObjectId是_id的預設類型,用12位元組的儲存空間
- 秒層級的唯一性,大致會按照插入的順序排列,隱含了文檔建立的時間
- _id通常由用戶端驅動程式完成
第三章 建立、更新及刪除文檔
基本的插入刪除修改操作
db.foo.insert({"bar":"baz"})db.users.remove()db.mailing.list.remove({"opt-out":true})start = time.time()db.drop_collection("bar")joe.relationships={"friends":joe.friends,"enimies":joe.enimies};delete joe.friends;delete joe.enimies;db.users.update({"name":"joe"}, joe)
使用修改器$set, $inc, $ne, $push, $addToSet, $each
//添加或刪除索引值db.users.update({"name":"joe"}, {"$set":{"favorite book":"war and peace"}})db.users.update({"name":"joe"}, {"$unset":{"favorite book":1}})//增減數值db.games.update({"game":"pinball", "user":"joe"}, {"$inc":{"score":50}})//向數組添加值db.papers.update({"authors cited":{"$ne":"Richie"}}, {"$push":{"authors cited":"Richie"}})//集合中增加值db.users.update({"_id":ObjectId("xxxx")},{"$addToSet":{"emails":"[email protected]"}})db.users.update({"_id":ObjectId("xxxx")},{"$addToSet":{"emails":{"$each":["[email protected]", "[email protected]"]}}})//集合中刪除值db.lists.insert("todo":["dishes","laundry","dry cleaning"])db.lists.update({},{"$pull":{"todo":1}}) //從數組末尾刪除db.lists.update({},{"$pop":{"todo":-1}}) //從數組開頭刪除//數組定位db.blog.update({"post":post_id},{"$inc":{"comments.0.votes":1}}) //用下標db.blog.update({"comments.author":"John"},{"$set":{"comments.$.author":"Jim"}}) //只替換第一個
第四章 查詢
第五章 索引
第六章 彙總
第七章 進階指南
第八章 管理
第九章 複製
第十章 分區
第十一章 應用舉例
MongoDB: The Definitive Guide [1]