使用C# / ASP.NET MVC建模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 DB中,我知道我应该将事物定义,但是如何在不检索整个帖子的情况下插入答案?使用MongoDB的Norm可以使用这种操作吗?
解决方案
通常,在MongoDB中,您会将答案嵌入到问题中。 99%的时间您会质疑查询,因此您不妨同时获得答案。
一些要求是,我需要能够显示答案的数量...
如果您将问题带回答案,这真的很容易。您将拥有一个带有答案的数组/列表/集合。因此,您只会抓住长度。
但是我如何插入答案,而无需检索整个帖子
MongoDB支持原子“ $ PUSH”操作。这意味着您可以将项目添加到数组中,而无需实际从客户端加载文档。从JavaScript Shell中,看起来像这样:
db.questions.update( {_id : your_id}, { $push : { answers : your_answer_object } } );
因此,MongoDB能够做到这一点。您必须与Norm驱动程序进行核对,以确保它们实际上允许这种行为(如果他们不支持$ push,他们确实缺少某些东西)。
其他提示
答案应该是问题的一部分。
公共类问题{public String 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; }
}
由于缺乏加入文档数据库,因此鼓励您将整个图的实例存储在一个文档中。
不隶属于 StackOverflow