2015-01-14 4 views
0

Я строю систему «Тест». у каждого теста есть некоторые вопросы. Каждый вопрос имеет ответы.MongoDB: Как вставить сложную схему

Я получаю JSON, чтобы создать вопрос с другого сервера, как:

{ 
    requestType: 'CreateNewQuestion', 
    questionId: 17447, 
    subject: "Math", 
    subsubject: "Heshbon", 
    questionText: "1+4 Equels?", 
    answers: [{text : "2",rightAnswer : false}, 
       {text : "35",rightAnswer : false}, 
       {text : "5",rightAnswer : true}, 
       {text : "9",rightAnswer : false}] 
} 

Я построил 2 Schemas:

module.exports = mongoose.model('Answer' , 
{ 
    text: String, 
    rightAnswer: Boolean 
} 

);

И

module.exports = mongoose.model('Question' , 
{ 
    questionId: Number, 
    subject: String, 
    subsubject: String, 
    questionText: String, 
    answerTimeAvg: Number, 
    fastestAnswer: Number, 
    answers: [{ type : mongoose.Types.ObjectId, ref: 'Answer' }] 
} 
); 

Я сделал функцию, получить JSON и попытаться сохранить его люблю:

var QuestionSchema = require('./schemas/question'); 
var AnswerSchema = require('./schemas/answer'); 

CreateNewQuestion: function (message) { 

    var information = { 
     questionId: message.questionId, 
     subject: message.subject, 
     subsubject: message.subsubject, 
    } 

    //Save Question 
    var record = new QuestionSchema(information); 
    record.save(function (err) {}); 
} 

Как я могу создать ответы объект и заселить их в вопрос?

Я пытался несколько вещей, но получаю сообщение об ошибке,

Что такое правильный путь?

Я пытался читать «mongoosejs.com/docs» но сайт вниз :(

+1

Ваш пример показывает документ 'answers' содержащий встроенные вложенные документы, но ваша схема определяет его как массив ссылок вместо Что является правильным – JohnnyHK

+0

Оба :).?. Я получаю полный Json, но я хочу разделить его на 2 модели. –

ответ

0

мне нужно изменить модель на:

module.exports = mongoose.model('Question' , 
{ 
    subject: String, 
    subsubject: String, 
    questionText: String, 
    answerTimeAvg: Number, 
    fastestAnswer: Number, 
    answers: [{ type : mongoose.Schema.Types.ObjectId, ref: 'Answer' }] 
}); 

И сохранить ответы первый, и чем использовать идентификаторы:

CreateNewQuestion: function (message) { 

    //////////////////////// 
    // Saving the answers // 
    //////////////////////// 

    var answers = message.answers; 
    var answers_ids = []; 

    for(var i in answers) { 
     var answer = new AnswerSchema(answers[i]); 
     answer.save(); 
     answers_ids.push(answer._id); 
    } 


    ///////////////////////// 
    // Saving the question // 
    ///////////////////////// 

    var information = { 
     subject: message.subject, 
     subsubject: message.subsubject, 
     questionText: message.questionText, 
     answerTimeAvg: 0, 
     fastestAnswer: 0, 
     answers: answers_ids 
    } 

    var record = new QuestionSchema(information); 
    record.save(function (err) { 
     if (err) { 
      console.log("Bad = " + err); 
      var result = "bad"; 
      message.sendReplay({result: result}); 
     } 
     else { 
      var result = "AllGood"; 
      message.sendReplay({result: result}); 
     } 
    }); 

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