MongoDB - 如何处理关系

时间:2011-10-02 19:39:15

标签: mongodb

我刚开始学习nosql数据库,特别是MongoDB(没有具体的mongodb原因)。我浏览了一些教程网站,但仍然无法弄清楚,它如何处理两个文档/实体之间的关系

让我们举例说: 1.一名员工在一个部门工作 2.一名员工在多个部门工作

我不知道“关系”一词对mongodb有意义。

有人可以请一些关于加入,关系的事情。

4 个答案:

答案 0 :(得分:7)

简短回答:使用“nosql”你不会这样做。

您要做的不是加入或关系,而是将用户所在的部门添加到用户对象中。

如果您需要从该方向查看用户,您还可以将用户添加到“部门”对象中的字段。

这样的非规范化数据在“nosql”数据库中是典型的。

请参阅此非常密切相关的问题:How do I perform the SQL Join equivalent in MongoDB?

答案 1 :(得分:1)

通常,您希望对集合(=表)中的数据进行非规范化。您的集合应该进行优化,这样您就不需要进行连接(在NoSQL中无法进行连接)。

在MongoDB中,您可以引用其他集合(=表格),也可以将它们相互嵌入 - 无论您的域名更有意义。集合中的条目有大小限制,因此您不能只嵌入百科全书britannica; - )

如果您查找所选编程语言的API文档和示例,这可能是最好的。 对于Ruby,我建议使用Mondoid库:http://mongoid.org/docs/relations.html

答案 2 :(得分:1)

在某些情况下,您希望/需要将文档分开,在这种情况下,您将从一个对象中获取_id并将其作为值添加到另一个对象中。

例如:

db.authors
{
  _id:ObjectId(21EC2020-3AEA-1069-A2DD-08002B30309D)
  name:'George R.R. Martin'
}

db.books
{
  name:'A Dance with Dragons'
  authorId:ObjectId(21EC2020-3AEA-1069-A2DD-08002B30309D)
}

书籍和作者之间没有官方关系,只是作者_id的副本到书中的authorId值。

希望有所帮助。

答案 3 :(得分:1)

通常,如果您决定了解NoSql数据库,您应该遵循“NoSql方式”,即学习移动以外的原则和设计方法,而不是简单地尝试将RDBMS映射到您的第一个NoSql项目。

简单地说 - 你应该学习如何嵌入和反规范化数据(如上面提到的那样),而不是简单地复制id来模拟外键。

如果您执行“foreign _id way”,则下一步是搜索事务以确保始终插入/更新两个“行”。 Oracle / MySql等待后几步。 :)

相关问题