使用C#/ ASP.net MVC建模NoSQL论坛应用程序

时间:2010-11-25 15:28:05

标签: c# mongodb norm nosql

我目前正在开发一个基于论坛(问题/答案)的应用程序 使用C#ASP.net MVC和MongoDB进行数据存储。

我正在看模特 我想要有这样的单独的类:(简化)

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; }
 }

我的问题是:
如何处理“回复”
我最好(如上面的模型中)有两个独立的“实体” 或者我的问题模型中是否应该有一个答案列表?

有些要求是我需要能够显示答案数...等等。

将它存储在NoSQL数据库中,我知道我应该对事物进行非规范化,但是如何在不检索整个帖子的情况下插入答案?使用NoRM和MongoDB可以实现这种操作吗?

2 个答案:

答案 0 :(得分:6)

通常在MongoDB中,您可以在问题中嵌入答案。 99%的时间你会按问题查询,所以你也可以同时获得答案。

  

有些要求是我需要能够显示答案数......

如果你带回问题的答案,这真的很容易。你将有一个包含答案的数组/列表/集合。所以你只需抓住长度。

  

但如何在不检索整个帖子的情况下插入答案

MongoDB支持原子“$ push”操作。这意味着您可以将项添加到数组,而无需从客户端实际加载文档。从javascript shell,它看起来像这样:

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

所以MongoDB能够做到这一点。您必须检查NoRM驱动程序以确保它们实际上允许这种类型的行为(如果它们不支持$ push,它们确实缺少某些东西)。

答案 1 :(得分:2)

答案应成为问题的一部分。

公共课问题     {         公共字符串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; }
}

由于缺少连接,文档数据库鼓励您将整个图形的实例存储在一个文档中。