首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >面向文档的数据库中的关系?

面向文档的数据库中的关系?
EN

Stack Overflow用户
提问于 2010-02-25 22:57:06
回答 6查看 3.4K关注 0票数 18

我对面向文档的数据库很感兴趣,我还想尝试一下MongoDB。所以我开始了一个相当简单的项目(一个问题跟踪器),但我很难用非关系型的方式思考。

我的问题:

  1. 我有两个相互关联的对象(例如issue = {code:"asdf-11", title:"asdf", reporter:{username:"qwer", role:"manager"}} -这里我有一个与问题相关的用户)。我是应该创建另一个文档'user‘并在'issue’文档中按其id引用它(就像在关系数据库中一样),还是应该将用户的所有数据保留在subdocument?
  2. If中我的对象(子文档)在一个文档中,我可以在一个查询中更新它们吗?
EN

回答 6

Stack Overflow用户

发布于 2011-11-05 19:12:55

我对面向文档的数据库完全陌生,现在我正在尝试使用node.js和mongodb开发一种内容管理系统,所以我面临着和你一样的问题。

通过反复试验,我发现了这条经验法则:我为可能是我查询的“主题”的每个实体创建一个集合,而将其余的嵌入到其他对象中。

例如,博客条目中的评论可以嵌入,因为它们通常绑定到条目本身,而我无法考虑对所有评论进行全局有用的查询。另一方面,附加到帖子上的标签可能需要它们自己的集合,因为即使它们被绑定到帖子上,您也可能希望对所有标签进行全局推理(例如,创建一个热门主题列表)。

票数 4
EN

Stack Overflow用户

发布于 2013-05-09 04:32:34

在我看来,这其实很简单。嵌入文档只能通过它们的主文档访问。如果您可以想象到需要查询主文档上下文之外的对象,那么就不要嵌入它。使用裁判。

对于您的示例

代码语言:javascript
复制
issue = {code:"asdf-11", title:"asdf", reporter:{username:"qwer", role:"manager"}}

我会让问题和记者各自有自己的文件,并在问题中引用记者。您还可以在reporter中引用问题列表。这样就不会重复问题中的记者,可以分别查询,可以按问题查询报表,可以按报表查询问题。如果在问题中嵌入报告器,则只能按问题查询报告器。

如果嵌入文档,则可以在单个查询中更新所有文档,但必须在每个主文档中重复更新。这是使用参考文档的另一个好理由。

票数 2
EN

Stack Overflow用户

发布于 2010-03-05 02:47:55

mongodb和其他"NoSQL“产品的美妙之处在于它不需要设计任何模式。我使用MongoDB,我喜欢它,不用写SQL查询和糟糕的JOIN查询!来回答你的两个问题。

1-如果您创建了多个文档,则需要对DB进行两次调用。不是说这是一件坏事,但是如果你可以把所有的东西都放到一个文档中,为什么不呢?我记得当我使用MySQL时,我会创建一个“博客”表和一个“评论”表。现在,我将注释附加到同一集合(也称为表)中的记录,并继续在此基础上进行构建。

2-是...

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2334897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档