我对面向文档的数据库很感兴趣,我还想尝试一下MongoDB。所以我开始了一个相当简单的项目(一个问题跟踪器),但我很难用非关系型的方式思考。
我的问题:
issue = {code:"asdf-11", title:"asdf", reporter:{username:"qwer", role:"manager"}} -这里我有一个与问题相关的用户)。我是应该创建另一个文档'user‘并在'issue’文档中按其id引用它(就像在关系数据库中一样),还是应该将用户的所有数据保留在subdocument?发布于 2011-11-05 19:12:55
我对面向文档的数据库完全陌生,现在我正在尝试使用node.js和mongodb开发一种内容管理系统,所以我面临着和你一样的问题。
通过反复试验,我发现了这条经验法则:我为可能是我查询的“主题”的每个实体创建一个集合,而将其余的嵌入到其他对象中。
例如,博客条目中的评论可以嵌入,因为它们通常绑定到条目本身,而我无法考虑对所有评论进行全局有用的查询。另一方面,附加到帖子上的标签可能需要它们自己的集合,因为即使它们被绑定到帖子上,您也可能希望对所有标签进行全局推理(例如,创建一个热门主题列表)。
发布于 2013-05-09 04:32:34
在我看来,这其实很简单。嵌入文档只能通过它们的主文档访问。如果您可以想象到需要查询主文档上下文之外的对象,那么就不要嵌入它。使用裁判。
对于您的示例
issue = {code:"asdf-11", title:"asdf", reporter:{username:"qwer", role:"manager"}}我会让问题和记者各自有自己的文件,并在问题中引用记者。您还可以在reporter中引用问题列表。这样就不会重复问题中的记者,可以分别查询,可以按问题查询报表,可以按报表查询问题。如果在问题中嵌入报告器,则只能按问题查询报告器。
如果嵌入文档,则可以在单个查询中更新所有文档,但必须在每个主文档中重复更新。这是使用参考文档的另一个好理由。
发布于 2010-03-05 02:47:55
mongodb和其他"NoSQL“产品的美妙之处在于它不需要设计任何模式。我使用MongoDB,我喜欢它,不用写SQL查询和糟糕的JOIN查询!来回答你的两个问题。
1-如果您创建了多个文档,则需要对DB进行两次调用。不是说这是一件坏事,但是如果你可以把所有的东西都放到一个文档中,为什么不呢?我记得当我使用MySQL时,我会创建一个“博客”表和一个“评论”表。现在,我将注释附加到同一集合(也称为表)中的记录,并继续在此基础上进行构建。
2-是...
https://stackoverflow.com/questions/2334897
复制相似问题