在mongo中哪一个更好?将孩子放在一个阵列或许多领域

时间:2016-02-15 03:33:58

标签: mongodb schema

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

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

原来我们有2个架构设计。

if($this->input->post('user_name') != $original_value) { $is_unique = '|is_unique[users.user_name]' } else { $is_unique = '' } $this->form_validation->set_rules('user_name', 'User Name', 'required|trim|xss_clean'.$is_unique);

{ categories: [...] }

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

2 个答案:

答案 0 :(得分:1)

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

在你的情况下,看起来我们不是在谈论儿童,而是关于分层分类,有基类,然后是子类,等等,分为四个级别。我觉得很难证明将它存储为数组是正确的,因为数组会暗示所有成员大致同样有价值,除了它们的排序。正如@Thilo在评论中指出的那样,字段结构也使查询和索引更容易。

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

答案 1 :(得分:0)

这将是最好的结构

{
    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
}

如果您有多个类别,最好在数组中进行分组。

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