当我们决定将数据存储下来的时候,我们首先要回答的一个问题就是:“我打算存储什么样的数据?这些数据之间有什么关系?实体之间有什么关系?实体的属性之间有什么关系”。
为了说明问题,我们这儿举例的场景是要描述 库存清单的数据库,库存清单数据 包括 物料名称、数量、规格大小、状态、标签说明、等级。
如下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,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。
因作者非专业翻译人员,难免有错误或不准确的地方,请见谅。
总结 以上是内存溢出为你收集整理的如何在MongoDB设计存储你的数据(JSON化)?全部内容,希望文章能够帮你解决如何在MongoDB设计存储你的数据(JSON化)?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)