2010-11-25 11 views
3

現在、フォーラム(質問/回答)ベースのアプリケーションを開発中です。
C#ASP.net MVCとMongoDBを使用してデータを保存します。C#/ ASP.netでNoSQLフォーラムアプリケーションをモデリングするMVC

私は現在モデルを見ています。私はこのような別々のクラスを有していると考えていた
:(簡体字)

public class Question 
{ 
    public string ID { get; set; } 

    public string Title { get; set; } 
    public string Body { get; set; } 
    public List<string> Tags { get; set; } 
    public DateTime DateCreated { get; set; } 

    public string ForumID { get; set; } 
} 

回答

public class Answer 
{ 
    public string ID { get; set; } 
    public string QuestionID { get; set; } 
    public string Body { get; set; } 
    public DateTime DateCreated { get; set; } 
} 

私の質問は次のとおりです。
「回答」
を処理するためにはどうすれば最善持つのアム(上のモデルのように)2つの別個の「エンティティ」
質問モデルに回答リストが必要ですか?

いくつかの要件がこれにより

は、NoSQLのDBに格納されている...私は答えなどの数を表示できるようにする必要がありますということです、私は物事を非正規化する必要があり承知だけど、どのようにすることができます投稿全体を取得せずに回答を挿入しますか? MongoDBでNoRMを使用すると、そのような操作が可能ですか?

答えて

6

通常、MongoDBでは、質問内に回答を埋め込みます。あなたが質問で質問している時間の99%は、回答を同時に得ることができます。いくつかの要件が、私は答えの数を表示できるようにする必要がありますということです

...

ご質問と答えを戻す場合は、これは本当に簡単です。答えがある配列/リスト/コレクションがあります。だからあなたはちょうど長さをつかむでしょう。

が、どのように私は、全体のポストを取得せずに、答えを挿入することができ

MongoDBは、原子「$プッシュ」操作をサポートしています。つまり、実際にクライアントから文書をロードせずに配列に項目を追加することができます。 JavaScriptのシェルから、それは次のようになります。

db.questions.update({_id : your_id}, { $push : { answers : your_answer_object } });

だから、MongoDBは、このすることができます。あなたは実際にこのタイプの振る舞いを許すことを保証するために、NoRMドライバにチェックする必要があります($ pushをサポートしていない場合、何かが実際に欠けています)。

2

回答は質問の一部である必要があります。

public class質問 { 公開ストリングID {get;セット;そのため、文書データベースが一つの文書で、グラフ全体のインスタンスを格納することをお勧め加入の欠如}

public string Title { get; set; } 
    public string Body { get; set; } 
    public List<string> Tags { get; set; } 
    public DateTime DateCreated { get; set; } 

    public string ForumID { get; set; } 
    public List<Answers> Answers { get; set; } 
} 

関連する問題