2017-04-27 14 views
0

我試圖構建一個web應用程序。mongoose從find方法中獲取數據並將它們插入到其他模式中

在網站上,我需要從MongoDB中獲得的教師數據與貓鼬,其中一些將在其他模式(場)插入。

if (!req.body) return console.log("No data sent"); 
    var newcourse; 
    var iname = req.body.iname; 
    var results; 


/*ilist.find({ name: iname }).toArray((err, result) => { 
    if (err) return console.log(err); 
    results = result; 
});*/ 
dbs.collection('instructors').find({ name: iname }).toArray((err, result) => { 
    results = result; 
    //console.log(result);   
}); 
// console.log(ilist.data); 

newcourse = new clist({ 
    'coursename': req.body.coursename, 'coursenumber': req.body.coursenumber, 'coursecredit': req.body.coursecredit 
    , 'courseroom': req.body.room, 'instructors.name': req.body.iname, 'instructors.email': results.email, 'instructors.phone': results.phone, 'instructors.role': req.body.role 
}); 

newcourse.save(function (err) { 
    if (err) { 
     console.log(err); 
     res.status(400); 
     res.send(err); 
    } 
    else { 
     res.status(200); 
     console.log('A new course has been registered!'); 
     res.redirect('/course'); 
    } 
}); 

-----架構-------------------

var instructorlist = mongoose.Schema({ 
    name: { type: String, required: true }, 
    age: { type: Number, required: true }, 
    gender: { type: String, required: true }, 
    DOB: { type: Date, required: true, default: Date.now }, 
    email: { type: String, required: true }, 
    phone: { type: Number, required: true }, 
    address: { type: String, required: true }, 
    dateofstart: { type: Date, required: true}, 
    courses: { 
     coursename: { type: String, required: false }, 
     coursenumber: { type: Number, requird: false }, 
     coursecredit: { type: Number, required: false }, 
     courseroom: { type: String, required: false } 
    } 
}); 
var courselist = mongoose.Schema({ 
    coursename: { type: String, required: true }, 
    coursenumber: { type: String, required: true }, 
    coursecredit: { type: Number, required: true }, 
    courseroom: { type: String, required: false }, 
    courseregisteddate: {type: Date, default: Date.now}, 
    students: { 
     name: { type: String, required: false }, 
     phone: { type: Number, requird: false }, 
     email: { type: String, required: false }, 
     class: { type: String, required: false } 
    }, 
    instructors: { 
     name: { type: String, required: false }, 
     phone: { type: Number, requird: false }, 
     email: { type: String, required: false }, 
     role: { type: String, required: false } 
    } 
}); 

我想instuctorlist的電子郵件和電話。(其它來自req.body)並且 將它放入新的變量中以保存在mongodb中。 感謝您閱讀。

回答

0

教官發現功能將被異步調用,所以你有貓鼬查詢的結果之前的JavaScript代碼將繼續。

您需要添加回調內部過程的節能。看起來是這樣的:

if (!req.body) return console.log("No data sent"); 
 

 
dbs.collection('instructors').find({ 
 
    name: req.body.iname 
 
}).toArray((err, instructors) => { 
 
    if (!err) { 
 
    if (!instructors) { 
 
     var newcourse = new clist({ 
 
     // new data also from instructors 
 
     }); 
 

 
     newcourse.save(function(err) { 
 
     if (err) { 
 
      res.status(400); 
 
      res.send(err); 
 
     } 
 
     else { 
 
      res.status(200); 
 
      res.redirect('/course'); 
 
     } 
 
     }); 
 
    } 
 
    else { 
 
     res.status(400); 
 
     res.send("Could not find instructor"); 
 
    } 
 
    } 
 
    else { 
 
    res.status(400); 
 
    res.send(err); 
 
    } 
 
});

但要知道,這個你給定名稱的所有教練,你必須選擇一個從陣列。如果您想要將更多課程保存到教師中,您必須更改模式:

var courseSchema = mongoose.Schema({ 
 
    // Schema variables 
 
    ... 
 

 
}); 
 

 
var courseModel = mongoose.model("Course", courseSchema); 
 

 
var instructorlist = mongoose.Schema({ 
 
    name: { 
 
    type: String, 
 
    required: true 
 
    }, 
 

 
    ... 
 

 
    courses: [{ 
 
    type: ObjectId, 
 
    ref: "Course" 
 
    }] 
 
});

+0

謝謝你的答案。我會嘗試一下,看到類似的情況,但不完全明白。再次感謝你:) –

+0

參考文獻意味着它指的課程。非常感謝你! –

+0

是的ref會將課程的ID保存在數據庫的教師表中。所以你不必再次保存相同的值。如果你想獲得真正的價值,你必須使用'populate'。看看這個功能吧 –

相關問題