2

次のようなモデルがあります。

class Comment {
    public string ID { get; set; }
    public string ArticleType { get; set; }
    public string ArticleID { get; set; }
    public string Body { get; set; }

    public DateTime DateCreated { get; set; }

    public string UserID { get; set; } 
}

アプリケーション内の他の内容に関するコメントを保存するアプリを作成しています。たとえば、コメントが製品に関するものである場合、ArticleType は「製品」となり、ArticleID は製品 ID となります。

このデータを保存するためにmongodbを使用します

コメントに返信して、応答を階層的に保存できるようにしたい コメント ドキュメント内にリストを保存する必要がありますか?

Rob Ashton のこの記事を読みました。これは、ブログ投稿やコメントなどに適しています...

ただし、私のモデルでは、「返信コメント」は親コメントを直接参照しています。

コメントの返信にも返信がある可能性があり、xレベルの深さになります...? これは map reduce タイプのクエリの範囲外でしょうか?

編集:

「記事」はおそらく不適切な用語です。ArticleType と ArticleId は、コメントを特定の「もの」に結び付ける方法にすぎません。たとえば、この質問にコメントする場合、articleType は stackOverflowQuestion で、id は 5144273 になります。

eBay オークションについてコメントする場合、articleType を ebay、articleId を 1234902493984 (商品番号) にすることができます。

うまくいけば、それはより理にかなっています...

4

2 に答える 2

1

考えられる解決策は 3 つあります (あくまで私の意見です)。

1.

public class Comment 
{
  ...
  public List<Comment> ChildComments {get;set;}
}

長所:階層データを簡単に読み込んで表示できます。あなたはコメントから親コメントを知りません。
短所: ID を使用してコメントを照会および更新することはできません。

2.

public class Comment 
{
  ...
  public string ParentCommentId {get;set;}
}

長所:必要に応じてクエリ/更新できます。
短所:ロード階層が必要な場合、mongo への大量のリクエスト。

3.私のお気に入りのもの ;) :

 public class Comment 
 {
   ...
   public string ParentCommentId {get;set;}
 }

 public class Article
 {
   ...
   public List<Comment> Comments {get;set;}
 }

長所:必要に応じてクエリ/更新できます。1 回のリクエストですべてのコメントを含む記事を読み込むことができます。冗長な ArticleType と ArticleId を保存する必要はありません。
短所:記事を読み込んでメモリ内に階層を構築する必要があります。

これがあなたの選択に役立つことを願っています..

于 2011-02-28T17:21:20.187 に答える