MongoDB 數據庫,對象,集合
標籤(空格分隔): MongoDB
數據庫
一個mongodb中可以建立多個數據庫。
MongoDB的默認數據庫爲”db”,該數據庫存儲在data目錄中。
在MongoDB中可以創建數據庫,如果你想使用MongoDB,創建數據庫不是必要的。
“show dbs” 命令可以顯示所有數據的列表。
C:\Users\bin>mongo
MongoDB shell version: 3.0.2
connecting to: test
> show dbs
admin 0.078GB
db 0.078GB
local 0.078GB
test 0.078GB
>
執行 “db” 命令可以顯示當前數據庫對象或集合。
> db
test
>
運行”use”命令,可以連接到一個指定的數據庫。
> use local
switched to db local
>
注意:
- 數據庫名稱可以是任何字符,但是不能包含空字符串,點號(.),或者” “。
- “system” 作爲系統保留字符串不能作爲數據庫名。
- 數據庫名不能包含 “$”。
文檔
文檔是mongodb中的最核心的概念,是其核心單元,我們可以將文檔類比成關係型數據庫中的每一行數據。
多個鍵及其關聯的值有序的放置在一起就是文檔。在mongodb中使用一種類json的bson存儲數據。
MongoDB中對文檔的區分包括:鍵值對的順序,鍵和值的類型,鍵和值的大小寫。在兩個文檔中如果這三者有任何一個不一致,這兩個文檔就不相同。文檔中鍵值對的“值”的數據類型甚至還可以是整個嵌入的文檔,“鍵”則只能是字符串。
文檔例子如下:
{ name : "zhang" }
通常,”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":"zhang"} {"Name":"zhang","sex":"nan"}
當第一個文檔插入時,集合就會被創建。
capped collections
Capped collections 就是固定大小的collection。
它有很高的性能以及隊列過期的特性(過期按照插入的順序). 有點和 “RRD” 概念類似。
Capped collections是高性能自動的維護對象的插入順序。它非常適合類似記錄日誌的功能 和標準的collection不同,你必須要顯式的創建一個capped collection, 指定一個collection的大小,單位是字節。collection的數據存儲空間值提前分配的。
要注意的是指定的存儲大小包含了數據庫的頭信息。
> db.createCollection("mycoll", {capped:true, size:100000})
{ "ok" : 1 }
>
- 在capped collection中,你能添加新的對象。
- 能進行更新,然而,對象不會增加存儲空間。
- 如果增加,更新就會失敗 。
- 數據庫不允許進行刪除。
> db.mycoll.insert({"name":"zhang"})
WriteResult({ "nInserted" : 1 })
> db.mycoll.remove({"name":"zhang"})
WriteResult({
"nRemoved" : 0,
"writeError" : {
"code" : 20,
"errmsg" : "cannot remove from a capped collection: test.mycoll"
}
})
>
- 使用drop()方法刪除collection所有的行。
- 注意: 刪除之後,你必須顯式的重新創建這個collection。
- 在32bit機器中,capped collection最大存儲爲1e9( 1X109)個字節。