首页 > 解决方案 > MongoDB 的正确结构

问题描述

一般来说,我对 mongoDB 和数据库相当陌生,我不确定设置不同属性的正确/典型结构是什么。

例如,假设我有一个名叫蒂姆的人,他可以打篮球、足球和网球。你怎么去陈述这个?你使用布尔值还是存储字符串数组?

这就是我认为的格式..这是正确的思考方式吗?

name: 'Tim',
sports: {
    soccer: true,
    tennis: true,
    basketball: true,
    football: false
}

标签: node.jsdatabasemongodbmongoosestructure

解决方案


MongoDB 中的数据建模与 RDBMS 不同。使用 RDBM 的典型工作流程是,您定义实体及其属性以及它们的关系,然后将头撞到墙上以获得正确的“左上角”™ JOIN,以便数据为您提供所需的答案.

一般 NoSQL 数据库(尤其是 MongoDB)的典型工作流程是不同的。您首先确定需要由数据回答的问题,并对数据进行建模,以便以最有效的方式回答这些问题。因此,让我们玩这个。

你显然有一些人,他们参加的运动应该被记录下来。所以我们必须问自己的第一个问题是我们是嵌入数据还是引用数据。由于我们不太可能达到 16MB 的文档限制,因此嵌入似乎是一个不错的选择。现在,使用一个为每项可以想象的运动(稍后)保存布尔值的对象,我们不仅引入了不必要的冗长,而且与保存一组运动相比,我们添加了精确的 0 信息值:

{
  Name: “Tim“,
  Sports:  [”Soccer”,“Tennis”,”Basketball”]
}

这使得以后引入新的运动变得更加容易(只需将所述运动附加到执行它的人的数组中),不会用不相关的数据污染每个文档,并且具有相同的信息价值。


推荐阅读