在MongoDB中正确实现MySQL表格?

3
我是您的助手,很高兴为您服务。以下是您需要翻译的内容:

我是mongoDB的新手,想知道如何在mongoDB中翻译表关系。

例如,在我的MySQL数据库中,我有两个表:Manager和Employee。

Manager {
  name: String,
  ID: Int Primary Key
}

Employee {
  name: String,
  ID: Int Primary Key,
  Manager: int Foreign key (Manager.ID)
}

我想知道使用MongoDB实现这个的正确方法是什么。


2
MongoDB是一种非关系型数据库。为什么你想在那里建立关系? - Eriks Klotins
1
你打算如何查询你的数据?这些数据是基于你将使用这两个实体实现的查询来建模的(在MongoDB中)。 - prasad_
如果你想将文档引用到另一个文档中,可以使用 [mongoose]。在 mongoose 中,你可以引用和填充数据。此外,你还可以使用虚拟填充进行反向填充。 - Arpit Yadav
2个回答

1

MongoDB是一个非关系型文档数据库

‘文档’是集合中的记录,每个文档可以有任意数量的字段,包括数组、映射等等。这样做的优点和缺点是,同一集合中的两个文档可能具有完全不同的字段。关系数据库的常规形式不适用。此外,每个文档都有一个唯一的ID。

如何将文档/集合链接在一起完全取决于应用程序逻辑。 几个选项:

  1. Keep everything together in once collection.

     // 
     {
          name: "Jon Appleseed",
          manager: "Jonh Bosch"
     },
     {
          name:"Another employee",
          manager: "Jonh Bosch"
     }
    
  2. Use two collections as suggested by @iprakashv

  3. Use a mixed approach:

      // Employees
      {
          _id: "_234234",
          name: "Jon Appleseed",
          manager:{
             name:"John Bosh",
            id: _12321
          }
      },
      {
          _id: "_233234",
          name: "Another employee",
          manager:{
             name:"John Bosh",
             id: "_12321"
          }
      }
    
     // Managers
     {
          _id: _123213,
          name:"John Bosh",
          subordinates: 
          [
             {name:"Jon Appleseed", id: "_234234" },
             {name:"Another employee", id: "_12321" },
          ]
     }
    
正如您所见,通过牺牲规范化,您可以获得更多的灵活性。

0

由于mongodb是一个无模式和无关系集合的NoSQL数据库(尽管您可以在集合上放置验证),所以无连接模式和嵌套对象在这里更有意义。

现在根据我们的要求,每个经理对象都与其员工相关联,因此理想情况下应该有一个包含所有员工对象的数组,但是当我们需要所有员工而不考虑经理时,这并不实际。

因此,我们可能只想要员工ID的数组,而不是员工对象的数组,并且需要单独维护员工集合(表)以获取员工对象。

上述模式的示例文档如下:

//employee collection document
{
    "ID": "E12334",
    "name": "John Doe"
}

//manager collection document
{
    "ID": "M453",
    "name": "Jane Doe",
    "employeeIDs": ["E12334", "E12343"]
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接