Mongodb返回填充对象,但保存清空一些字段

所以我有一个小问题,当我发布保存数据库上的数据时,它做的一切正常,并返回该对象应该是,但是当我从数据库中得到它,它带有一个空数组,我知道,我保存这个数组与数据。

这是代码:

调节器

router.post("/semestre", function(req, res) { var req = req; var res = res; console.log("hello! routed to /semestre [create]"); //build needs var newSemestre = new semestreModel(); //fecthing materias newSemestre.nome = req.body.nome; if (req.body.materias.length > 0) { var materias = JSON.parse(req.body.materias); materias.forEach(function(materia, index) { //building needs var newMateria = new materiaModel(); //fechting avaliacoes newMateria.nome = materia.nome; newMateria.avaliacoes = []; if (materia.avaliacoes.length > 0) { materia.avaliacoes.forEach(function(avaliacao, index) { //console.log("avaliacao:" + avaliacao.nome); //building nedds var newAvaliacao = new avaliacaoModel(); newAvaliacao.nome = avaliacao.nome; newAvaliacao.nota = avaliacao.nota; newAvaliacao.save(function(err, availacao) { if (err) { console.log("@semestres [create] - saving avaliacao has error"); res.send({ erro: true, msg: "Oops! alguma coisa está errada!" }); } else { newMateria.avaliacoes.push(avaliacao._id); } }); }); } else { console.log("avaliacoes:[]"); } newMateria.save(function(err, materia) { if (err) { //console.log(err); console.log("@semestres [create] - saving materia has error"); res.send({ erro: true, msg: "Oops! alguma coisa está errada!" }); } else { newSemestre.materias.push(materia._id); } }); }); } newSemestre.save(function(err, semestre) { if (err) { //console.err(err); console.log("saving semestre has error"); res.send({ erro: true, msg: "Oops! alguma coisa está errada!" }); } else { //console.log(semestre); res.send(semestre); } }); }); 

架构

 var materia = { nome: String, notaFinal:Number, semestre_id:String, frequencia:Number }; var MateriaSchema = new Schema(materia ); var model = { nome: String, materias: [String], completo: Boolean }; var SemestreSchema = new Schema(model); var model = { nome: String, materia_id: String, nota: Number }; var AvaliacaoSchema = new Schema(model); 

再次,一切正常,但它只是在创build一个newSemestre时保存一个空的newSemestre

尝试以下方法: –

 var newSemestre = new semestreModel(); //fecthing materias newSemestre.nome = req.body.nome; if (req.body.materias.length > 0) { var materias = JSON.parse(req.body.materias); materias.forEach(function(materia, parentIndex) { //building needs var newMateria = new materiaModel(); //fechting avaliacoes newMateria.nome = materia.nome; newMateria.avaliacoes = []; if (materia.avaliacoes.length > 0) { materia.avaliacoes.forEach(function(avaliacao, index) { //console.log("avaliacao:" + avaliacao.nome); //building nedds var newAvaliacao = new avaliacaoModel(); newAvaliacao.nome = avaliacao.nome; newAvaliacao.nota = avaliacao.nota; newAvaliacao.save(function(err, availacao) { if (err) { console.log("@semestres [create] - saving avaliacao has error"); res.send({ erro: true, msg: "Oops! alguma coisa está errada!" }); } else { newMateria.avaliacoes.push(avaliacao._id); } }); }); } else { console.log("avaliacoes:[]"); } newMateria.save(function(err, materia) { if (err) { //console.log(err); console.log("@semestres [create] - saving materia has error"); res.send({ erro: true, msg: "Oops! alguma coisa está errada!" }); } else { newSemestre.materias.push(materia._id); //If the last loop of "foreach" is going on, then only call the function, which will do save. if(parentIndex > req.body.materias.length) { saveSemester(); // call some function } } }); }); } }); 

function在这里。

 function saveSemester() { // do stuff to save semester } 

空数组,保存,因为在您试图保存学期之前,该数组中没有数据。 所以你需要等待推动完成,然后进行保存,这将保存你想要的数据。

UPDATE

更新了我的答案。 一旦最后一个循环进行到foreach,函数将被调用。 这是我现在能想到的。

希望这会有所帮助。