关于简单MongoDB数据库结构的建议

时间:2011-02-06 08:20:59

标签: ruby-on-rails mongodb database-design mongoid nosql

我刚开始使用MongoDB和Mongoid for Rails,需要一些关于设计简单博客数据库的正确方法的建议。

我目前正在使用下面的结构,但我需要一种方法来查询给定用户编写的所有注释(关系数据库等效项为Comment.where('user_id = ?', user_id))。

这是正确的设置,还是应该将注释移到自己的文档中,而不是将它们嵌入到帖子中(就像我在关系数据库模式中那样)?

感谢任何建议,谢谢。

数据库架构

post {
  _id: (object id)
  title: string
  body: string
  user_id: reference
  comments: [
    { _id: (object id), body: string, user_id: reference },
    { _id: (object id), body: string, user_id: reference },
    ...
  ]
}

user {
  _id: (object id)
  name: string
}

在MongoDB中,我的相应模型是:

class Post
  include Mongoid::Document
  field :title
  field :body
  embeds_many :comments
  references_one :user
end

class Comment
  include Mongoid::Document
  field :body
  embedded_in :post
  references_one :user
end

class User
  include Mongoid::Document
  field :name
  references_many :posts
end

3 个答案:

答案 0 :(得分:3)

在Mongodb.org上有一篇很棒的文章,关于建模评论的各种选择。

退房:http://www.mongodb.org/display/DOCS/MongoDB+Data+Modeling+and+Rails#MongoDBDataModelingandRails-ModelingComments

答案 1 :(得分:1)

您可以在MongoDB中使用点符号来对嵌入文档运行查询过滤器。 在您的情况下,要检索用户的所有评论,您只需执行以下操作:

Post.where("comments.user_id" => myUser.id).all

答案 2 :(得分:0)

http://www.mongodb.org/display/DOCS/Dot+Notation+(Reaching+into+Objects)

但不确定你真正需要多少种不同的选择。

嵌入式文档或多个查询或数据库引用是选项。

不确定为什么必须一遍又一遍地问这个。