如何在MongoDB設計存儲你的數據(JSON化)?


第一步 定義要描述的數據集

當我們決定將數據存儲下來的時候,我們首先要回答的一個問題就是:“我打算存儲什么樣的數據?這些數據之間有什么關系?實體之間有什么關系?實體的屬性之間有什么關系”。

為了說明問題,我們這兒舉例的場景是要描述 庫存清單的數據庫,庫存清單數據 包括 物料名稱、數量、規格大小、狀態、標簽說明、等級。

如下list是我們希望關於庫存清單的部分格式數據

name quantity size status tags rating
journal 25 14x21,cm A brown, lined 9
notebook 50 8.5x11,in A college-ruled,perforated 8
paper 100 8.5x11,in D watercolor 10
planner 75 22.85x30,cm D 2019 10
postcard 45 10x,cm D double-sided,white 2

 

 

 

 

 

 

 

 

(備注: cm 為長度單位,厘米;in 也是長度單位:1in=25.4mm==2.54cm)

第二步 JSON 化 思維

上面表中的size 和 tags 欄位 都存儲了多個值,例如Size 既有大小 的數字描述還有它們單位的描述,tags 這種標簽的說明更是難以統一,可能此物料只有一個屬性說明,而其他物料可能有多個屬性的說明。這種字段如果在關系型數據庫中存儲,假設存儲在一個字段中,那么查詢起來比較費時,模式化也比較困難。如果拆開放到不同的表中,完整性就不是很好,表的設計也是難以清晰,表Join查詢也會有性能下降。

在MongoDB 數據中,數據都是以文檔的形式存儲的。這些文檔都是以JSON(JavaScript Object Notation)格式設計存在的【物理盤上實際是以BSON格式存儲的】。JSON文檔支持內嵌字段。因此,我們可以將關聯性強的數據或同一個List中的數據存儲在同一個文檔中,此時,不再需要存儲在SQL數據庫中多個表中【如果在SQL數據庫,需要多個表,來描述關聯】。

JSON 格式就是將數據存為 鍵/值對 。在JOSN文檔中,鍵和值 之間用 冒號(:)隔開;一個個鍵/值之間用逗號(,)隔開,同一個文檔中的一組鍵/值包含在一個花括號({})中。

例如,下面List中的 name 和 quantity 字段數據 JSON化,

name quantity size status tags rating
notebook 50 8.5x11,in A college-ruled,perforated 8

 

 

 

 

將這兩個欄位JOSN化,就是下面這個形式:

{"name": "notebook", "qty": 50}

 第三步 針對多值字段,選擇合適的數據模型

針對多值的字段,我們可以從內嵌模型、數組 List 模型兩種數據模型中選擇一種。

例如上面 庫存清單數據的那個例子,我們可以將Size,設計成內嵌模型,這個Size 可以有三個屬性:高、寬、計量單位。

{ "h": 11, "w": 8.5, "uom": "in" }

 一些商品原料,可能又多個等級得分,我們可以將這些等級得分存儲在一個數組list中,例如上面例子中的ratings欄位。

[ { "score": 8 }, { "score": 9 } ]

上面例子中的tags 也可以存放在數組list中

[ "college-ruled", "perforated" ]

那么其中的關於notebook的記錄數據 如下
notebook 50 8.5x11,in A college-ruled,perforated 8,9


而將其 JOSN 化后,要存的文檔樣式如下:

{ "name": "notebook", "qty": 50, "rating": [ { "score": 8 }, { "score": 9 } ], "size": { "height": 11, "width": 8.5, "unit": "in" }, "status": "A", "tags": [ "college-ruled", "perforated"] }

以上過程就是數據記錄的JSON過程、文檔化過程。


注: 以上內容作者翻譯自 MongoDB 官網,網址為 https://docs.mongodb.com/guides/server/introduction。
因作者非專業翻譯人員,難免有錯誤或不准確的地方,請見諒。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM