2015-01-14 35 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層架構:

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' }] 
}); 

而且先保存答案,比用的ID:

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}); 
     } 
    }); 

},