阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

如何在MongoDB设计存储你的数据(JSON化)?

170次阅读
没有评论

共计 1715 个字符,预计需要花费 5 分钟才能阅读完成。

第一步 定义要描述的数据集

当我们决定将数据存储下来的时候,我们首先要回答的一个问题就是:“我打算存储什么样的数据?这些数据之间有什么关系?实体之间有什么关系?实体的属性之间有什么关系”。

为了说明问题,我们这儿举例的场景是要描述 库存清单的数据库,库存清单数据 包括 物料名称、数量、规格大小、状态、标签说明、等级。

如下 list 是我们希望关于库存清单的部分格式数据

name quantity size status tags rating
journal 25 14×21,cm A brown, lined 9
notebook 50 8.5×11,in A college-ruled,perforated 8
paper 100 8.5×11,in D watercolor 10
planner 75 22.85×30,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.5×11,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.5×11,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。
因作者非专业翻译人员,难免有错误或不准确的地方,请见谅。

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计1715字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中