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

3

我目前正在开发一个基于问答形式的论坛应用程序。
使用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个回答

6
通常在MongoDB中,您会将答案嵌入到问题中。99%的情况下,您将通过问题进行查询,因此您可以同时获取答案。
“一些要求是我需要能够显示答案的数量......”
如果您将答案与问题一起返回,这非常容易。您将拥有一个包含答案的数组/列表/集合。所以你只需要获取长度。
“但是如何插入答案,而不检索整个帖子”
MongoDB支持原子“$push”操作。这意味着您可以向数组中添加项目,而无需从客户端加载文档。从javascript shell中,它看起来像这样:
db.questions.update({_id:your_id},{ $push : {answers: your_answer_object}});
因此,MongoDB具备此功能。您需要检查NoRM驱动程序,以确保它们实际上允许此类行为(如果它们不支持$push,则确实缺少某些内容)。

2

答案应该是问题的一部分。

公共类问题 { 公共字符串ID {获取;设置; } }

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接