Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

177
Vistas
mongoose get data from find method and insert them in other schema

I am trying to build a web application.

At the website, I need to get instructor data from mongodb with mongoose and some of them will be inserted in other schema(Course).

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

-----schema-------------------

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

I want to get instuctorlist's email and phone.(others are from req.body) and put it into newcourse variable for saving in mongodb. Thank you for reading it.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

The instructors find function will be called asynchronously so the javascript code will go on before you have the results of that mongoose query.

You need to add the saving of the course inside the callback. Could look like this:

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

But be aware that with this you get all instructors with the given name and you have to select one from that array. If you want to save more courses to a instructor you have to change the schema: e.g.

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

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda