所以我有一个小问题,当我发布以在数据库中保存数据时,它一切正常并按应有的方式返回对象,但是当我从数据库中获取它时,它带有一个空数组,我知道我用数据保存这个数组。
这是代码:
Controller
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);
再次一切正常,但它只是在创建 newSemestre
时保存一个空的 materias
数组。
最佳答案
尝试以下方式:-
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 的最后一个循环进行,函数将被调用。这是我现在能想到的。
希望这会有所帮助。
关于javascript - Mongodb 返回填充对象但保存清空一些字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37605619/