Estoy tratando de construir una aplicación web.
En el sitio web, necesito obtener datos del instructor de mongodb con mongoose y algunos de ellos se insertarán en otro esquema (Curso).
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'); } });-----esquema-------------------
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 } } });Quiero obtener el correo electrónico y el teléfono de Instuctorlist (otros son de req.body) y ponerlo en la variable newcourse para guardarlo en mongodb. Gracias por leerlo.
La función de búsqueda de instructores se llamará de forma asíncrona, por lo que el código JavaScript continuará antes de que tenga los resultados de esa consulta de mangosta.
Debe agregar el guardado del curso dentro de la devolución de llamada. Podría verse así:
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); } });Pero tenga en cuenta que con esto obtiene todos los instructores con el nombre dado y debe seleccionar uno de esa matriz. Si desea guardar más cursos para un instructor, debe cambiar el esquema: por ejemplo
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" }] });