Моделирование приложения форума NoSQL с помощью C # / ASP.net MVC - PullRequest
3 голосов
/ 25 ноября 2010

В настоящее время я разрабатываю приложение на основе форума (вопрос / ответ).
Использование 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 голосов
/ 25 ноября 2010

Обычно в MongoDB вы встраиваете ответы в вопрос. В 99% случаев вы будете делать запросы по Вопросам, так что вы также можете получать ответы одновременно.

Некоторые требования заключаются в том, что мне нужно будет отображать количество ответов ...

Если вы возвращаете ответы с вопросами, это действительно легко. У вас будет массив / список / коллекция с ответами. Таким образом, вы просто захватите длину.

но как мне вставить ответ, не извлекая весь пост

MongoDB поддерживает атомарную операцию "$ push". Это означает, что вы можете добавить элемент в массив без фактической загрузки документа с клиента. Из оболочки javascript это выглядело бы так:

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

Так что MongoDB на это способен. Вам нужно проверить драйверы NoRM, чтобы убедиться, что они действительно допускают такой тип поведения (они действительно что-то упускают, если не поддерживают $ push).

2 голосов
/ 25 ноября 2010

Ответ должен быть частью вопроса.

публичный вопрос { открытый идентификатор строки {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; }
}

Из-за отсутствия объединений базы данных документов рекомендуют хранить экземпляры всего графа в одном документе.

...