# MongoDB概念解析 ## 1、MongoDB vs SQL ![](https://img2023.cnblogs.com/blog/2987571/202306/2987571-20230628132104929-1652408975.png) ## 2、資料庫 * 一個MongoDB可以 ...
MongoDB概念解析
1、MongoDB vs SQL
2、資料庫
-
一個MongoDB可以建立多個資料庫,其中預設資料庫為“db”,存儲在data目錄中
-
MongoDB的單個實例可以容納多個獨立的資料庫,每一個都有自己的集合、許可權,不同資料庫存儲在不同的文件
-
show dbs
:顯示所有的資料庫列表
db
:可以顯示當前資料庫對象或集合
use
:連接到指定的資料庫,如果不存在則可以創建一個資料庫
-
資料庫的名稱要求:
-
不能是空字元串
-
不得含有' '(空格)、.、$、/、\和\0 (空字元)
-
應該全部小寫
-
最多為64個位元組
-
保留資料庫名:admin(擁有所有資料庫的許可權)、local(永遠不會被覆制)、config(分片設置)
-
3、文檔(Document)
- 文檔是一組鍵值對(BSON),MongoDB的文檔不需要設置相同的欄位,並且相同的欄位不需要相同的數據類型
-
註意:
-
文檔中的鍵值對是有序的
-
文檔中的值不僅可以使在雙引號里的字元串,也可以是其他數據類型,甚至可以是另外一個文檔
-
MongoDB區分類型和大小寫
-
MongoDB的文檔不能有重覆的鍵
-
文檔的鍵是字元串,除了少數例外,鍵可以使用任意的UTF-8字元
-
-
文檔命名規範:
-
鍵不能含有空字元,\0用來表示鍵的結尾
-
.和$符號有特別的意義,只有在特定的環境下才可以使用
-
以下劃線"_"開頭的鍵是保留的(不是嚴格要求的)
-
4、集合
-
集合就是MongoDB的文檔組,類似於關係型資料庫中的表
-
集合存在於資料庫中,集合沒有固定的結構,意味著你可以對集合插入不同格式和類型的數據
-
當第一個文檔插入時,集合就會被創建
1、合法的集合名
-
集合名稱不能是空字元串
-
集合名不能含有空字元,只能再結合結尾表示
-
集合名稱不能以“system.”開頭,這是為系統集合保留的首碼
-
用戶創建的集合名字不能含有保留字元。有些驅動程式的確支持在集合名裡面包含,這是因為某些系統生成的集合中包含該字元。除非你要訪問這種系統創建的集合,否則千萬不要在名字里出現$
2、Capped collections
-
capped collections就是固定大小的集合
-
它有很高的性能以及隊列過期的特性,是高性能的自動的維護對象的插入順序
5、元數據
-
在MongoDB中,元數據(Metadata)是用於描述和管理資料庫、集合和文檔的信息。它包含了關於這些對象的屬性、結構和配置的數據。
-
元數據在MongoDB中非常重要,它提供了對資料庫和集合的結構、配置和性能等方面的瞭解,幫助管理員和開發人員有效地管理和操作MongoDB資料庫。
6、數據類型
1、常用數據類型
2、ObjectId
-
類似於唯一主鍵,可以很快的去生成和排序,包含12bytes
-
由於 ObjectId 中保存了創建的時間戳,所以你不需要為你的文檔保存時間戳欄位,你可以通過 getTimestamp 函數來獲取文檔的創建時間
3、字元串
- BSON 字元串都是 UTF-8 編碼
4、時間戳
-
時間戳是指特定事件發生時的標記或記錄,通常以數字形式表示。它表示自某個參考點以來經過的時間量,以秒、毫秒或其他單位進行測量。
-
BSON 有一個特殊的時間戳類型用於 MongoDB 內部使用,與普通的 日期 類型不相關。 時間戳值是一個 64 位的值。
-
時間戳的起點通常是某個特定的時刻,稱為"紀元"(epoch)。最常用的紀元是1970年1月1日格林威治標準時間(UTC)的午夜。在Unix和類Unix系統中,時間戳通常表示自此紀元以來經過的秒數。例如,當前時間的時間戳是一個表示自1970年1月1日以來的秒數。
-
時間戳還可以包含更精確的時間信息,例如毫秒級或微秒級時間戳,以提供更高的時間解析度。在這種情況下,時間戳可能包括小數部分,表示秒的小數值。
-
前32位是一個 time_t 值(與Unix新紀元相差的秒數),後32位是在某秒中操作的一個遞增的序數
-
BSON 時間戳類型主要用於 MongoDB 內部使用。在大多數情況下的應用開發中,你可以使用 BSON 日期類型。
4、日期
- 日期類型是有符號的, 負數表示 1970 年之前的日期。