所以我有一点问题,当我发布数据库保存数据时,它确实一切正常并返回应该是的对象,但是当我从数据库中获取它时,它带有一个空数组,我知道我用数据保存这个数组。
这是代码:
控制器
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);
同样一切正常,但在创建materias
时只会保存newSemestre
的空数组。
答案 0 :(得分:2)
尝试以下方式: -
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 saveSemester()
{
// do stuff to save semester
}
保存空数组,因为在您尝试保存学期之前,该数组中没有数据。因此,您需要等待推送完成,然后继续执行保存,这将保存您想要的数据。
<强>更新强>
更新了我的回答。一旦最后一个循环进入foreach,函数将被调用。这就是我现在能想到的。
希望这会有所帮助。