MongoDB中MySQL表的正确实现?

MongoDB中MySQL表的正确实现?,mysql,mongodb,Mysql,Mongodb,我是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实现这一点的正确方法是什么。因为MongoD

我是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实现这一点的正确方法是什么。

因为MongoDB是一个NoSQL数据库,用于无模式和无关系的集合(尽管可以对集合进行验证),所以无连接模式和嵌套对象在这里更有意义

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

因此,我们可能希望只保留employee id数组,而不是单独维护employee对象数组和employee集合(表),以获取employee对象

上述架构的示例文档如下所示:

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

//manager collection document
{
    "ID": "M453",
    "name": "Jane Doe",
    "employeeIDs": ["E12334", "E12343"]
}
MongoDB是一个应用程序

“文档”是集合中的一个记录,每个文档可以有任意数量的字段,包括数组、映射等。其优点和缺点是同一集合中的两个文档可能包含完全不同的字段。关系数据库的正常形式不适用。此外,每个文档都有一个唯一的id

如何将文档/集合链接在一起完全取决于应用程序逻辑。 很少有选择:

  • 把所有的东西都集中在一起

     // 
     {
          name: "Jon Appleseed",
          manager: "Jonh Bosch"
     },
     {
          name:"Another employee",
          manager: "Jonh Bosch"
     }
    
  • 按照@iprakashv的建议使用两个集合

  • 使用混合方法:

      // 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" },
          ]
     }
    

  • 如您所见,您以牺牲规范化为代价获得了更大的灵活性

    MongoDB是一个非关系数据库。您为什么希望在那里建立关系?您计划如何查询您的数据?数据建模(在MongoDB中)基于将使用这两个实体实现的查询。你可以用[猫鼬]来做这个。在mongoose中,您可以引用和填充数据。此外,还可以使用虚拟填充进行反向填充。