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 可以进行这种操作吗?

4

2 回答 2

6

通常在 MongoDB 中,您会将答案嵌入问题中。99% 的时间您将通过问题进行查询,因此您不妨同时获得答案。

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

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

但是如何插入答案而不检索整个帖子

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

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

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

于 2010-11-25T20:28:58.237 回答
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; }
}

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

于 2010-11-25T16:43:32.170 回答