2011-02-06 11 views
4

MongoDBとMongoid for Railsを使い始めました。シンプルなブログデータベースを設計するための適切なアドバイスが必要です。シンプルなMongoDBデータベース構造に関するアドバイス

私は現在以下の構造を使用していますが、特定のユーザーが書き込んだすべてのコメントを照会する方法が必要です(リレーショナルデータベースに相当するものはComment.where('user_id = ?', user_id)です)。

これは正しく設定されていますか、またはコメントを独自のドキュメントに移動して記事に埋め込むべきではありません(リレーショナルデータベースのスキーマと同様)。

ありがとうございました。

データベーススキーマのMongoDBでは

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 
} 

、私の対応機種は以下のとおりです。

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)があります。しかし、よりよいアプローチについて意見を得るのは良いことです。 –

答えて

3

Mongodb.orgには、モデリングコメントのさまざまな選択肢についての素晴らしい記事があります。

チェックアウトは:http://www.mongodb.org/display/DOCS/MongoDB+Data+Modeling+and+Rails#MongoDBDataModelingandRails-ModelingComments

+0

ありがとうございます。そのページの次の引用文は、この質問に完全に答えています。「自分のコレクション内のコメントをモデリングすると、最新の表示、ユーザー別のグループ化など、さまざまなサイト全体の集計が容易になります。 –

0

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

しかし、あなたが本当に必要とするどのように多くの異なるオプションがわかりません。

埋め込みドキュメントまたは複数のクエリまたはデータベース参照はオプションです。

これが何度も繰り返し尋ねられる必要があるのか​​分かりません。

1

あなたは、埋め込まれた文書に対してクエリフィルタを実行するためにMongoDBにドット表記を使用することができます。あなたのケースで 、ユーザーによるすべてのコメントを取得するために、あなたは、単に行うことができます:

Post.where("comments.user_id" => myUser.id).all 
関連する問題