- 文件
是 mongodb 的最小資料集單位,是多個鍵值對有序租戶在一起的資料單元,類似於關係型資料庫的記錄
- 集合
一組文件的集合,文件存放的是資料,集合內的結構是可以不同的,集合就類似於關係型資料庫的表
- 庫
資料庫,由多個集合組成的。每個資料庫都市完全獨立的,有自己的使用者,許可權資訊,獨立的儲存資料夾
- 例項
在系統執行庫的程式及節點集,一個例項可以有多個資料庫
關係型資料庫和 mongodb 對比
例如 mongodb 和 mysql 進行對比
檔名 | MongoDB | Mysql |
---|---|---|
服務名 | mongod | mysqld |
客戶端名 | mongo | mysql |
類似於這這種資料庫開源元件,服務名字後面都會有一個 d
客戶端程式,是用於與服務端程式通訊的
關係型資料庫 和 mongodb 基本概念對比學習
概念 | 關係型資料庫 | Mongdb |
---|---|---|
資料庫 | database | database |
表 | table | collection |
資料行 | row data | document |
欄位 | column | field |
索引 | index | index |
表關聯 | join | embedding 或 linkding |
分片 / 分割槽 | partition | shard |
分割槽鍵 | partition key | sharding key |
上述表格中,我們可以清晰的看出,mongodb 中的 文件 對應著關係型資料庫的行資料,mongodb 中的 集合 對應著關係型資料庫的 表格
mongodb 的資料型別
前面圖上有提到,mongodb 中的文件類似於 json 物件,屬於 json 中的一種,成為 bson。
文件中欄位中的值可以包括其他文件,成為內嵌文件,也可以包括陣列和文件資料
關於文件儲存的優點有這些:
- 文件
即為物件,對應於許多程式語言中的本機資料型別
- 嵌入式文件和陣列減少了對連線的需求
- 動態模式支援流暢的多型性
我們們一起來看看 bson 都有哪些資料型別,bson 是 json 文件的二進位制表示形式,bson 包含了比 json 更多的資料型別,如下:
type | number | 說明 |
---|---|---|
Double | 1 | 雙精度浮點值 |
String | 2 | 字串,UTF-8才是合法的 |
Object | 3 | 用於內嵌文件 |
Array | 4 | 陣列 |
Binary data | 5 | 二進位制資料 |
Udefined | 6 | “undefined” |
Objectid | 7 | 物件 id |
Boolean | 8 | 布林 |
Date | 9 | 日期時間,unix 標準 |
Null | 10 | 建立空值 |
Regular Expression | 11 | 正規表示式 |
DBPointer | 12 | “dbPointer” |
JavaScript | 13 | “javascript“ |
Symbol | 14 | “symbol” |
JavaScript(with scope) | 15 | “javascript with scope” |
32 - bit integer | 16 | int 型別 |
Timestamp | 17 | mongodb 複製和 sharing 使用的特殊內部型別,前 4 個位元組是增量,挨著的 4 位元組是時間戳 |
64-bit integer | 18 | long 型別 |
Decimal128 | 19 | decimal |
Min key | -1 | 比正常 bson 型別元素值都低的型別 與 255 是同樣的效果 |
Max key | 127 | 比正常 bson 型別元素值都高的型別 |
需要注意的一點:
一個 bson 文件最大的大小是 16M,並且文件巢狀級別不能超過 100 層
看到這裡是不是和上述說到的 mongodb 能夠儲存大量資料 TB 或者 PB 級別的有點矛盾了,沒關係,我們來看看這個資料型別
GridFS
docs.mongodb.com/manual/core/gridf...
用於儲存和檢索超過BSON-document大小限制 (16mb) 就會使用到 GridFS 資料型別
mongodb 的簡單安裝
mongodb 的安裝方式就不在這裡贅述了,可以檢視我的歷史文章 一文便知 GO 中mongodb 的安裝與使用
mongodb 的基本命令使用
總結 mongodb 常用命令
命令 | 作用 |
---|---|
use 資料庫名字 | 若資料庫不存在則建立,若存在則使用 |
show dbs | 顯示資料庫 |
db.dropDatabase() | 刪除當前資料庫 |
db.集合名字.drop() | 刪除集合 |
db.createCollection(“集合名字”) | 建立集合 |
db.集合名字.insert({}) | 若集合不存在,預設建立並插入資料 若集合存在,則插入資料 |
show collections / show tables | 顯示當前資料的集合 |
db.集合名字.insertOne({}) | 插入一條資料 |
db.集合名字.insertMany({[]}) | 插入多條資料 |
db.集合名字.find() | 查詢當前表格所有資料 |
db.集合名字.update({條件},{要做的更新操作}) | 更新文件資料 |
db.collection.save({帶有 Objectid 的資料}) | 替換已有文件,若 Objectid 主鍵存在就更新,不存在就插入 |
db.collection.remove({}) | 刪除文件 |
db.集合名字.find().pretty() | 以更友好的方式輸出 |
關於新建文件注意事項:
- 新建文件,會自動建立不存在的集合,資料庫
- 如果不指定主鍵,則會自動生成主鍵 _id 和他對應的值
- 寫操作都是基本單個文件級別的原子操作
關於 mongo db 查詢操作,我們可以有如下運算子可以使用
運算子 | 說明 |
---|---|
$eq | 等於 |
$lt | 小於 |
$lte | 小於等於 |
$gt | 大於 |
$gte | 大於等於 |
$in | 判斷元素是否在指定的集合範圍裡 |
$all | 判斷陣列中是否包含某幾個元素,無關順序 |
$nin | 判斷元素是否不在指定的集合範圍裡 |
$ne | 不等於 |
$not | 不匹配結果 |
$or | 有一個條件成立則匹配 |
$nor | 所以條件都不匹配 |
$and | 所有條件都必須匹配 |
$exists | 判斷元素是否存在 |
. | 子文件匹配 |
$regex | 正規表示式匹配 |
關於 mongodb 查詢的其他操作:
- 選擇需要的欄位
db.集合名字.find({},{欄位名:1})
- 排除不需要的欄位
db.集合名字.find({},{欄位名:0})
- 陣列子元素的選擇
db.集合名字.find({},{“欄位名.子文件名的欄位”:{$slice:[1,2]})
$slice ,可以取兩個元素陣列,分別表示跳過數和限制數
- 排序
sort()
db.集合名.find().sort({“欄位名”:1})
1 是升序
2 是降序
- 跳過和限制
skip(n) , 跳過 n 條資料
limit(n) ,限制 n 條資料
db.集合名.find().skip(3).limit(2)
- 查詢唯一的值
db.集合名.find().distinct({“欄位名”})
上面暫時都是常常使用到的操作,暫時先梳理到這裡,其他的我們們下一篇再接著寫,關於上述的操作,還是需要自己一一過一便,經過自己的大腦去思考和對比,才能熟悉的快,以後真正需要的時候就能很快的用上
歡迎點贊,關注,收藏
朋友們,你的支援和鼓勵,是我堅持分享,提高質量的動力
好了,本次就到這裡
技術是開放的,我們的心態,更應是開放的。擁抱變化,向陽而生,努力向前行。
我是小魔童哪吒,歡迎點贊關注收藏,下次見~
本作品採用《CC 協議》,轉載必須註明作者和本文連結