首先,向數據庫插入一條bjson數據
首先是定義文檔,然后使用admin用戶名密碼登錄,進入test數據庫,向test數據庫中插入此文檔(“表名稱和表中的記錄”)
插入結果,查看mongoVUE如下圖所示
從上圖可以看出系統自帶的三個數據庫,local,admin,test,在加入一條記錄的時候,會自動生成_id的自動標識。
我們再添加圖片,可以使用mongoVUE添加,如下圖所示。
Collections:在mongodb中叫做集合,是文檔的集合。無模式,可以存儲各種各樣的文檔。類似mysql中的表。
在關系型數據庫中,關系數據庫的每一張表就是一個關系模型的映射,每張表的字段就是對應的實體的屬性和主外鍵的集合,每個字段需要提前定義。
Document:這里的user集合(“表”)有一個document(document可以理解為mysql中的記錄)。文檔是mongodb保存數據的基本單元。數據的存儲結構為BSON格式,也就是我們開始添加的文檔,key value鍵值對類型。
文檔中保存到數據類型可以為:null、boolean、String、Object、32位整數、64位整數、64位浮點數、日期、正則表達式、js代碼、二進制數據、數組、內嵌文檔、最大值、最小值、未定義類型。
GridFS:因為bson對象的大小有限制,不適合存儲大型文件,GridFS文件系統為大型文件提供了存儲的方案,GridFS下的fs保存的是圖片、視屏等大文件。
無論是bson對象還是GriFs中存儲的大文件,我們發現當添加一個文檔的時候,會自動的添加_id ,不同的是圖片添加后會自動的加上_id,chunkSize,md5,legnth,aliases等,這些屬性是我們上傳完圖片后,mongodb分析后自動添加的,系統自動保存。
MongoDB的數據類型介紹
參考MongoDB官網:https://docs.mongodb.com/manual/reference/bson-types/
MongoDB文檔存儲是使用BSON類型,BSON(BSON short for Binary JSON, is a binary-encoded serialization of JSON-like documents)是二進制序列化的形式。類如JSON,同樣支持內嵌各種類型。
Type | Number | Alias | Notes |
---|---|---|---|
Double | 1 | “double” | |
String | 2 | “string” | |
Object | 3 | “object” | |
Array | 4 | “array” | |
Binary data | 5 | “binData” | |
Undefined | 6 | “undefined” | Deprecated. |
ObjectId | 7 | “objectId” | |
Boolean | 8 | “bool” | |
Date | 9 | “date” | |
Null | 10 | “null” | |
Regular Expression | 11 | “regex” | |
DBPointer | 12 | “dbPointer” | Deprecated. |
JavaScript | 13 | “javascript” | |
Symbol | 14 | “symbol” | Deprecated. |
JavaScript (with scope) | 15 | “javascriptWithScope” | |
32-bit integer | 16 | “int” | |
Timestamp | 17 | “timestamp” | |
64-bit integer | 18 | “long” | |
Decimal128 | 19 | “decimal” | New in version 3.4. |
Min key | -1 | “minKey” | |
Max key | 127 | “maxKey” |
重點介紹幾個類型,
ObjectId類型:這是MongoDB生成的類似關系型DB表主鍵的唯一key,生成快速。具體由12個字節組成:
前4個字節是unix秒,3個字節的機器標識符(為了分布式下的主鍵唯一),2個字節的進程id,3個字節的計數器數字
- a 4-byte value representing the seconds since the Unix epoch,
- a 3-byte machine identifier,
- a 2-byte process id, and
- a 3-byte counter, starting with a random value.
MongoDB的設計之初就是要做分布式數據庫。從ObjectId唯一主鍵的生成上,值得分布式系統設計人員參考。
3個字節的機器標識符,表示MongoDB實例所在機器的不同;2個字節的進程id,表示相同機器的不同MongoDB實例。再加上時間戳和隨機數(3個字節隨機數,同一秒上,理論上可以有2^24次個插入),很大程度上保證了ObjectId的唯一性。
String類型:
BSON字符串都是UTF-8編碼。
Timestamps類型:
BSON具有內部MongoDB使用的特殊時間戳類型,並且不與常規Date類型相關聯。 時間戳值是64位值,其中:
第一個32bit是unix時間戳秒;
第二個32bit是當前秒的遞增操作數。
可以保證一個mongod實例下,timestamps總是唯一的。
Date類型:
BSON Date是一個64bit有符號整數,表示自Unix紀元以來的毫秒數(1970年1月1日)。