2016-09-28 3 views
0

Я хотел бы создать приложение для викторины и сохранить результаты в одной коллекции (скажем, «QuizResults»). Я также хотел бы, чтобы админы могли создавать «шаблоны викторины», которые могли быть сохранены в коллекции (скажем, «QuizTemplates»). Админы должны иметь возможность «назначать» конкретные викторины определенным пользователям, и я буду отслеживать эти назначения в третьей коллекции (скажем, «QuizAssignments»).Определение схемы на основе документа

В коллекции QuizAssignments каждый документ будет иметь ссылку на пользователя AssignedTo и «TemplateForQuiz» в качестве ссылки на коллекцию «QuizTemplates».

Каждый документ QuizResults должен иметь ссылку QuizAssignment и ссылку QuizTemplate, а остальная часть документа должна быть продиктована шаблоном.

В качестве примера того, что я имею в виду - пытается упростить так не написано должным образом:

QuizTemplates: 
    QuizTemplate1: 
    Labels: ["What is 2+2?", "How do you say happy birthday in French?"] 
    Formats: [Number, String] 

    QuizTemplate2: 
    Labels: ["How do you say happy birthday in German?", "What is 3+3?"] 
    Formats: [String, Number] 

QuizAssignments: 
    User: Reference - User model 
    QuizTemplate: Reference - QuizTemplates model 

QuizResults: 
    User: Reference - User model 
    AssignedIn: Reference - QuizAssignments model 
    Template: Reference - QuizAssignments model 

/* for (let i = 0; i < this.template.Labels; i++) { 
    let qnNo = `${i + 1}`; 
    this["question" + i] = {}; 
    this["question" + i].label = this.template.Labels[i]; 
    this["question" + i].type = this.template.Formats[i]; 
} */ 

Кто-нибудь есть какие-либо идеи о том, как лучше реализовать это?

ответ

0

Одним из преимуществ использования mongodb является то, что вам не нужна какая-либо конкретная схема. Таким образом, ваш подход больше похож на рациональную базу данных.

Вы можете сделать это следующим образом:

QuizTemplates: 
1: 
    Name: First template 
    Questions: 
    1: 
    Label:"What is 2+2?" 
    Format: Number 
    2: 
    Label: "How do you say happy birthday in French?"] 
    Format: String 
2: 
    Name: Second template 
    Questions: 
    1: 
    Label:"What is 3+3?" 
    Format: Number 
    2: 
    Label: "How do you say happy birthday in German?"] 
    Format: String 

Quizzes: 
1: 
    User: Reference - User model 
    answers: 
    1: 
    Label: How do you say happy birthday in German? 
    Answer: Alles Gute zum Geburtstag 
    2: 
    Label: What is 3+3? 
    Answer: 9 

Вы можете просто вставить свои ответы как встроенные документы. Кроме того, вам не нужно явно хранить формат. Это важно только для отображения ввода, но это все равно сохраняется в шаблоне. Шаблон не требует дополнительной ссылки, поскольку изменение шаблона не влияет на результаты. Если вам нравится, вы можете записать имя или идентификатор для анализа данных.

Хороший старт читает документацию MongoDB о моделировании данных https://docs.mongodb.com/manual/core/data-modeling-introduction/

+1

Так что, если вы не возражаете, я суммируя (и рискуя положить слова в рот): 1. Забудьте о схеме для результатов; 2. Используйте документ QuizTemplate для настройки формы; 3. Вставьте любые данные из формы в документ «Результаты» под конкретным ключом; Это правда? –

+0

1. Да, ваше приложение несет ответственность за правильное обращение с данными. Например, у вас может быть рубин на приложении rails. Реализация этих моделей отвечает за валидацию и структуру. 2. Да. 3. Да, на этом сказано в 1. Это задача вашего приложения не базы данных. –

+0

Спасибо, просто хотел убедиться, что я правильно понял. –

Смежные вопросы