官术网_书友最值得收藏!

1.2 類比SQL模型

1.2.1 數據結構

如果你已經熟知關系型數據庫(RDBMS)的概念模型,那么不難理解database、table、row、column這幾個基本概念。MongoDB使用的數據模型與它們非常類似,見表1-2。

表1-2 MongoDB概念

說明如下:

● 數據庫(database):最外層的概念,可以理解為邏輯上的名稱空間,一個數據庫包含多個不同名稱的集合。

● 集合(collection):相當于SQL中的表,一個集合可以存放多個不同的文檔。

● 文檔(document):一個文檔相當于數據表中的一行,由多個不同的字段組成。

● 字段(field):文檔中的一個屬性,等同于列(column)。

● 索引(index):獨立的檢索式數據結構,與SQL概念一致。

● _id:每個文檔中都擁有一個唯一的_id字段,相當于SQL中的主鍵(primary key)。

● 視圖(view):可以看作一種虛擬的(非真實存在的)集合,與SQL中的視圖類似。從MongoDB 3.4版本開始提供了視圖功能,其通過聚合管道技術實現。

● 聚合操作($lookup):MongoDB用于實現“類似”表連接(table join)的聚合操作符。

盡管這些概念大多與SQL標準定義類似,但MongoDB與傳統RDBMS仍然存在不少差異,包括:

(1)半結構化,在一個集合中,文檔所擁有的字段并不需要是相同的,而且也不需要對所用的字段進行聲明。因此,MongoDB具有很明顯的半結構化特點。除了松散的表結構,文檔還可以支持多級的嵌套、數組等靈活的數據類型,非常契合面向對象的編程模型。

(2)弱關系,MongoDB沒有外鍵的約束,也沒有非常強大的表連接能力。類似的功能需要使用聚合管道技術來彌補。

1.2.2 類SQL語句

既然MongoDB視一切為文檔,那么自然也包括數據操作的命令。

所有的增加、刪除、修改、查詢命令都通過JSON文檔進行描述。值得慶幸的是,如果你已經熟知標準的SQL語法(ANSI SQL),那么在轉換到MongoDB這種文檔式命令風格時或許會覺得很自然。其中原因就在于,SQL本身也是一種結構化的表達語言,例如一個select查詢語句的基本組成包括:

● select子句,表示查詢什么內容。

● from子句,表示從哪里查。

● where子句,表示按什么條件過濾。

MongoDB的查詢命令幾乎有著一模一樣的語義,可以說MongoDB的指令實質上也是一種類SQL語義的實現。

接下來,通過一組對比來快速了解MongoDB的命令風格。

1.創建表

SQL語句如下:

類似的MongoDB命令如下:

MongoDB在首次寫入文檔時,會自動創建集合。

2.創建索引

SQL語句如下:

類似的MongoDB命令如下:

3.插入數據

SQL語句如下:

類似的MongoDB命令如下:

4.查詢全表

SQL語句如下:

類似的MongoDB命令如下:

5.條件查詢

SQL語句如下:

類似的MongoDB命令如下:

6.分頁查詢

SQL語句如下:

類似的MongoDB命令如下:

7.更新數據

SQL語句如下:

類似的MongoDB命令如下:

8.刪除數據

SQL語句如下:

類似的MongoDB命令如下:

或許,你基本能理解每個命令的含義。如果仍然存疑,請不要著急,在后面的章節中仍然會介紹這些命令的使用方法。

主站蜘蛛池模板: 长宁县| 新乡县| 苍溪县| 江油市| 望都县| 子长县| 南宫市| 含山县| 淮阳县| 梨树县| 高安市| 仁寿县| 成都市| 错那县| 两当县| 宜君县| 合川市| 巴塘县| 思南县| 喜德县| 高安市| 陵水| 化德县| 肇州县| 山东省| 麦盖提县| 曲松县| 徐汇区| 和平区| 久治县| 寿宁县| 屏东县| 吉林市| 丰宁| 长兴县| 德令哈市| 枣阳市| 东源县| 乐东| 绿春县| 上杭县|