我刚开始使用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
答案 0 :(得分:3)
在Mongodb.org上有一篇很棒的文章,关于建模评论的各种选择。
答案 1 :(得分:1)
您可以在MongoDB中使用点符号来对嵌入文档运行查询过滤器。 在您的情况下,要检索用户的所有评论,您只需执行以下操作:
Post.where("comments.user_id" => myUser.id).all
答案 2 :(得分:0)
http://www.mongodb.org/display/DOCS/Dot+Notation+(Reaching+into+Objects)
但不确定你真正需要多少种不同的选择。
嵌入式文档或多个查询或数据库引用是选项。
不确定为什么必须一遍又一遍地问这个。