javascript - 如何改进我的 MongoDB 结构?

标签 javascript node.js mongodb mongoose database

问题

我正在使用 mongoose 的架构创建 MongoDB 结构。

网站的目的是存储与组件相关的教程(文章)。一个组件属于一个类别并且来自一个或多个 vendor 。我来自 SQL 数据库,所以我不确定我为这个 NoSQL 数据库所做的结构..

是否有缺失信息?结构正确吗?

实际结构

文章

* title : String
* [ components : Component ]
* abstract : String (160- chars)
* content : String (markdown)
* [ langages : Langages ]
* created : Date
* [ files : 
  - path : String 
  - description : String ]
* by : User
* [ edited : User ] 

vendor

* name : String
* serial : String (10- chars)
* country : Country
* adress : String
* city : String
* score : Number
* [ components : 
  - component : Component
  - price : Number ]

国家/地区应该存储吗?

* name : String (China)
* serial : String (ZH)
* [ suppliers : Supplier ]

组件

* name : String (ex : Bluetooth slave)
* reference : String (ex : HC-06 )
* [ suppliers : Supplier ]
* [ categories : Category ]
* [ images : String ]

类别

* name : String
* description : String
* [ component : Component ]

最佳答案

MongoDB 是一个文档数据库,非常灵活,您可以选择任何方式构建文档!这与 SQL 的做事方式感觉非常不同。

从您的问题来看,没有“正确”,如果您有从一份文档到另一份文档的 ID,则该信息也是“完整”的。 SQL 和 Not-SQL DB 的汽车示例是,SQL 就像自动变速箱,可以为您做很多事情,而 NoSQL 是手动变速箱。您可以获得更多性能,但也必须对其进行更多调整。

你们有一对一的关系吗?如果是,只需将它们制作为同一文档即可。

如果您总是以相同的方式拉动树(组件+类别+ vendor ),也许只需将其设为单个文档即可!易于阅读,并且需要更多的更新工作。从您的示例中,只需嵌入类别和国家/地区 - 它们本质上只是字符串。

如果数据加倍可以帮助您获得高性能读取和更简单的结构,请不要害怕。无论如何,你阅读的内容可能会比你写的内容多很多。而且您创建/更新某些内容(文章)的次数将比更新 vendor 、类别等的次数

您将尝试更多的事情,并且您的数据可能会经常更改。这也算是NoSQL数据库的强项吧!您不需要管理架构,并且旧文档不会有可用的新字段。 (当然,如果您希望所有旧数据都包含新字段,则需要进行大量更新!)

最后一点,如果您愿意重组所有数据,只需使用 SQL,因为您已经了解它,并选择一个不错的 ORM,如 BookshelfSequelize ,或者只是通过 Knex 进行一些查询访问。让您的数据访问为您服务!文档存储可能不适合您的应用程序,如果您希望完成某件事(而不是了解 Mongo),那么仅使用 SQL 就会取得更好的成功。

关于javascript - 如何改进我的 MongoDB 结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30301543/

相关文章:

node.js - Node JS 如何确认 MongoDB 驱动程序没有阻塞

javascript - 通过javascript获取输入的id

javascript - 将列表转换为字典

javascript - 如何使用 PHP、AJAX 和 JS 的复选框来过滤类似产品?

javascript - Windows 上的 NodeJS 0.6.10 中的 Bogart 无法启动,并显示有关 'sys' 模块的消息

javascript - 如何使用@default 和 degenerated() 在 prisma 中声明数据库默认值?

javascript - Angularjs:隐藏 header 信息

javascript - NPM 环境变量在 Windows 中不起作用?

javascript - For Each 循环中的多个 Mongoose 调用

MongoDB 和 BIRT 报告?