2011-02-06 63 views
4

我剛剛開始使用MongoDB和Mongoid for Rails,並需要一些建議,以正確的方式設計一個簡單的博客數據庫。關於簡單的MongoDB數據庫結構的建議

我目前使用下面的結構,但我需要一種方法來查詢給定用戶寫的所有評論(關係數據庫等效將是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

一旦我貼這個,StackOverflow上扔了[此相關的帖子(http://stackoverflow.com/questions/3813975/ mongo-db-design-embedding-vs-relationships),它提供了一個很好的答案。儘管如此,仍然很好地獲得關於更好方法的意見。 – 2011-02-06 08:52:02

回答

1

您可以使用點符號在MongoDB中反對嵌入文檔運行查詢過濾器。 在你的情況下,由用戶檢索的所有意見,你可以簡單地做:

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