mongodb 基本概念

阿兵雲原生發表於2022-09-07

  • 文件

是 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 協議》,轉載必須註明作者和本文連結
關注微信公眾號:阿兵雲原生