我目前正在开发基于论坛的应用程序。
使用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; }
}

由于缺乏加入文档数据库,因此鼓励您将整个图的实例存储在一个文档中。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top