【问题标题】:Which one is better in mongo? Putting children in an array or in a number of fields哪一个在mongo中更好?将孩子放入数组或多个字段中
【发布时间】:2016-05-25 20:59:12
【问题描述】:

我有一个 MongoDB,它作为多个独立 SQL 数据库和一个 API 的整合中间层运行。

这些 SQL 数据库共享相似的 Article 表,但结构不同。鉴于一篇文章将在不超过 4 层的多个类别和子类别下。

原来我们有两种模式设计。

{ categories: [...] }

{ categoriyL1: xxx, categoriyL2: xxx, categoriyL3: xxx, categoriyL4: xxx }

所以问题是,哪一个在性能和可维护性方面更好。

【问题讨论】:

  • 第二种方法似乎更容易查询,也可能是索引。
  • 这是我所关心的。第二种方式类似于旧的 SQL 模式,而不是使用 Mongo 方式。

标签: mongodb schema


【解决方案1】:

标题问题的答案(最好将孩子放在数组或字段中)几乎总是取决于您的上下文。

在您的情况下,看起来我们不是在谈论儿童,而是在谈论分层分类法,有一个基本类别,然后是一个子类别,依此类推,分为四个级别。我发现很难证明将其存储为数组是合理的,因为数组意味着所有成员的价值大致相同,除了它们的排序。正如@Thilo 在评论中指出的那样,字段结构也使查询和索引变得更加容易。

但在我看来,使用字段最重要的好处是可以明确每个数据点的含义。如果一年后另一个开发人员查看categories 数组,他们可能会假设他们正在处理一组标签,并且会错过分类的分层结构。另一方面,如果开发人员查看一组字段,每个类别一个,正确命名,他们将有更好的机会理解您的意图。

【讨论】:

    【解决方案2】:

    这将是最好的结构

    {
        categories: [
            {category:xxx, type:L1}, 
            {category:xxx, type:L2}, 
            {category:xxx, type:L3}, 
            {category:xxx, type:L4}
        ]
    }
    

    代替

    {
        categoryL1: xxx,
        categoryL2: xxx,
        categoryL3: xxx,
        categoryL4: xxx
    }
    

    如果您有多个类别,最好分组然后放在一个数组中。

    对于第二个示例,添加新类别需要您修改结构,这不是一个好方法。

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-04
      • 2011-06-10
      • 2019-01-11
      相关资源
      最近更新 更多