2010-11-25 80 views
3

我目前正在開發基於論壇(問題/答案)的應用程序。
使用C#ASP.net MVC和MongoDB進行數據存儲。使用C#/ ASP.net建模NoSQL論壇應用程序MVC

我目前正在看模型。
我想有這樣不同的類中:(簡體)

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一起使用是否可行?

回答

6

通常在MongoDB中,你會在問題中嵌入答案。 99%的時間您將通過問題進行查詢,因此您不妨同時獲得答案。

有些要求是,我需要能夠顯示答案的個性化......

如果你帶回答案與問題,這是很容易的。你將有一個數組/列表/集合的答案。所以你只需抓住長度。

,但我怎麼可以插入一個答案,而無需檢索整個後

MongoDB的支持原子「$推」操作。這意味着您可以將一個項目添加到數組中,而無需實際從客戶端加載文檔。從JavaScript的外殼,它應該是這樣的:

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

所以MongoDB是這個能力。您必須檢查NoRM驅動程序,以確保它們確實允許這種類型的行爲(如果它們不支持$ push,那麼它們確實會丟失一些東西)。

2

答案應該是問題的一部分。

public class Question { 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; } 
} 

由於缺少連接文檔數據庫,因此鼓勵您將整個圖形的實例存儲在一個文檔中。