菜鳥的mongoDB學習---(二)MongoDB 資料庫,物件,集合
資料庫
一個mongodb中可以建立多個數據庫。
MongoDB的預設資料庫為"db",該資料庫儲存在data目錄中。
在MongoDB中可以建立資料庫,如果你想使用MongoDB,建立資料庫不是必要的。
"show dbs" 命令可以顯示所有資料的列表。
deng@deng-Lenovo:~$ mongo
MongoDB shell version: 2.0.4
connecting to: test
> show dbs
NewsDB 0.203125GB
local (empty)
>
執行 "db" 命令可以顯示當前資料庫物件或集合。
deng@deng-Lenovo:~$ mongo MongoDB shell version: 2.0.4 connecting to: test > db test >
執行"use"命令,可以連線到一個指定的資料庫。
deng@deng-Lenovo:~$ mongo
MongoDB shell version: 2.0.4
connecting to: test
> db
test
> use NewsDB
switched to db NewsDB
> db
NewsDB
>
資料庫名稱可以是任何字元,但是不能包含空字串,點號(.),或者" "。
"system" 作為系統保留字串不能作為資料庫名。
資料庫名不能包含 "$"。
文件
文件是mongodb中的最核心的概念,是其核心單元,我們可以將文件類比成關係型資料庫中的每一行資料。
多個鍵及其關聯的值有序的放置在一起就是文件。在mongodb中使用一種類json的bson儲存資料。
bson資料可以理解為在json的基礎上添加了一些json中沒有的資料型別。
如果我們會json,那麼bson我們就已經掌握了一半了,至於新新增的資料型別後面我會介紹。
文件例子如所示,這個是我利用爬蟲從網易新聞上抓下來的資訊,儲存到資料庫中。
{ "_id" : ObjectId("557a46d86e530e0e770001e4"), "from_url" : "http://tech.163.com/", "news_body" : [ "6月3日-北京,第七屆雲端計算大會期間,北京雲端時代公司題為“新桌面 新生態 新價值”的2015桌面雲生態鏈大會在國家會議中心成功召開。", "大會現場,雲端時代總經理蔣建平先生以實際案例向現場嘉賓剖析了當前桌面雲行業面臨的共性問題及挑戰,以及如何通過應用場景的歸類及標準化、場景需求組合的標準化,安裝部署的標準化、交付工具的標準化,攜手生態鏈合作伙伴以“桌面雲”的“工業4.0”思路來共同應對行業共性難題,提升企業IT價值。", "會上,雲端時代總經理蔣建平先生提出的構建桌面雲生態鏈,實現應用場景標準化、生態整合(產品認證和優化標準化)、產品形態整合標準化、部署整合標準化、裝置上線標準化、資源擴充套件標準化等提法不僅令現場聽眾耳目一新,深受啟發,而且受到生態鏈夥伴的一致認同。", "中科曙光、360、H3C、愛數軟體、吉大正元作為雲端時代桌面雲生態鏈核心戰略伙伴均派代表做了重要演講並參與了圓桌論壇的討論。上圖從左到右分別是:曙光資訊 雲端計算產品事業部總經理 何牧君,360 雲安全事業部副總經理 張曉兵,H3C 市場部、解決方案部部長 王東海,吉大正元 副總經理 朱明達,愛數軟體 產品副總裁 吳米香", "此外,來自雲端時代桌面雲生態鏈系統的多家IT廠商在現場也就“軟體國產化”、“產業網際網路”、“工業4.0”等熱點議題展開了熱烈討論。", "會議現場佈置了20個產品體驗臺,集中展示雲端時代集成了生態鏈廠商產品的統一管理門戶產品以及全系列雲端軟硬體一體產品。參會者可以動手操作,親自體驗雲端時代桌面雲產品的主要功能和效能模組。在產品演示過程和使用者親身體驗過程中,雲端時代的桌面雲產品以其精美的圖形設計、高清視訊、優化的儲存和複雜外設支援等重負載應用方面的卓越性和領先性,得到了使用者們的肯定。" ], "news_from" : "網易科技報道", "news_thread" : "AR99BQAF00094P25", "news_time" : "2015-06-04 14:43:47", "news_title" : "2015雲端時代桌面雲生態鏈大會成功召開", "news_url" : "http://tech.163.com/15/0604/14/AR99BQAF00094P25.html" }
通常,"object(物件)" 術語是指一個檔案。
檔案類似於一個RDBMS的記錄。
我們可以對集合(collection)進行插入,更新和刪除操作。
下表將幫助您更容易理解Mongo中的一些概念:
RDBMS | MongoDB |
---|---|
Table(表) | Collection(集合) |
Column(欄) | Key(鍵) |
Value(值) | Value(值) |
Records / Rows(記錄/列) | Document / Object(文件/物件) |
下表為MongoDB中常用的幾種資料型別。
資料型別 | 描述 |
---|---|
string(字串) | 可以是一個空字串或者字元組合。 |
integer(整型) | 整數。 |
boolean(布林型) | 邏輯值 True 或者 False。 |
double | 雙精度浮點型 |
null | 不是0,也不是空。 |
array | 陣列:一系列值 |
object | 物件型,程式中被使用的實體。可以是一個值,變數,函式,或者資料結構。 |
timestamp | timestamp儲存為64為的值,只執行一個mongod時可以確保是唯一的。前32位儲存的是UTC時間,單位是秒,後32為是在這一秒內的計數值,從0開始,每新建一個MongoTimestamp物件就加一。 |
Internationalized Strings | UTF-8 字串。 |
Object IDs | 在mongodb中的文件需要使用唯一的關鍵字_id來標識他們。幾乎每一個mongodb文件都使用_id欄位作為第一個屬性(在系統集合和定容量集合(capped collection)中有一些例外)。_id值可以是任何型別,最常見的做法是使用ObjectId型別。 |
集合
集合就是一組文件的組合。如果將文件類比成資料庫中的行,那麼集合就可以類比成資料庫的表。
在mongodb中的集合是無模式的,也就是說集合中儲存的文件的結構可以是不同的,比如下面的兩個文件可以同時存入到一個集合中:
{"name":"jingdong"} {"Name":"jingdong","sex":"man"}
合法的集合名
集合名稱必須以字母或下劃線開頭。
集合名可以保護數字
集合名稱不能使美元符"$","$"是系統保留字元。
集合的名字 最大不能超過128個字元 。
另外,"."號的使用在集合當中是允許的,它們被成為子集合(Subcollection);比如你有一個blog集合,你可以使用blog.title,blog.content或者blog.author來幫組你更好地組織集合。
如下例項:
db.tutorials.php.findOne()
capped collections
Capped collections 就是固定大小的collection。有點環形佇列的意思。
它有很高的效能以及佇列過期的特性(過期按照插入的順序). 有點和 "RRD" 概念類似。
Capped collections是高效能自動的維護物件的插入順序。它非常適合類似記錄日誌的功能 和標準的collection不同,你必須要顯式的建立一個capped collection, 指定一個collection的大小,單位是位元組。collection的資料儲存空間值提前分配的。
要注意的是指定的儲存大小包含了資料庫的頭資訊。db.createCollection("mycoll", {capped:true, size:100000})
- 在capped collection中,你能新增新的物件。
- 能進行更新,然而,物件不會增加儲存空間。如果增加,更新就會失敗 。
- 資料庫不允許進行刪除。使用drop()方法刪除collection所有的行。
- 注意: 刪除之後,你必須顯式的重新建立這個collection。
- 在32bit機器中,capped collection最大儲存為1e9( 1X109)個位元組。