MongoDB:具有嵌入式文档的高效架构设计

时间:2011-08-25 18:49:34

标签: mongodb nosql

我是NoSQL的新手,我正试图绕过它。作为一个例子,我试图为一个简单的博客设计一个模式,该博客的作者有帖子,有评论。像这样:

Author
name : String,
email : String,
posts : [Post]

Post
title : String,
body : String,
comments : [Comment]

Comment 
commenter : String,
comment : String

所以这似乎是设计模式的最不规范化的方式。当我想获得作者帖子的列表时它很有用,但是当我尝试通过它的标题查询帖子时遇到了问题。这将返回作者对象和作者的所有帖子。然后,我可以在帖子中搜索我想要的帖子,但这似乎效率低下。

处理此类架构的最有效方法是什么?我应该只有Posts对象并使作者成为Post对象中的字段(或嵌入式文档)吗?或者最好将数据存储在多个位置?

我花了这么多年时间尝试规范化关系数据库,而我似乎无法用NoSQL方式思考这些数据库。任何建议将不胜感激。

2 个答案:

答案 0 :(得分:0)

Post
 title: String
 author: String
 comment: String
 posted: Date

Author
 name: String
 email: String

如果您的模型的'核心'在这里是帖子,那么为什么不这样做,排名第一。您可以按标题,作者和日期搜索帖子。

答案 1 :(得分:0)

非规范化并不意味着禁止外键。

我认为你肯定应该通过Id提及你的作者。但是,这就是非规范化的来源,您希望将作者名称存储在Author对象的Post 中。这样,您就无需加入AuthorPost集合。

Post
  title: string
  body: string
  authorName: string
  authorId: [id of author]
  comments: list of [Comment]
  created: date
  modified: date

Author
  name: string
  email: string

Comment
  subject: string
  body: string
  author: string (if you want anon comments)