So habe ich ein kleines Problem, wenn ich Daten auf der Datenbank speichern, es tut alles OK und gibt das Objekt zurück, wie es sein sollte, aber wenn ich es aus der Datenbank bekomme Es kommt mit einem leeren Array und ich weiß, dass ich dieses Array mit Daten speichern.Mongodb zurückgegeben bevölkertes Objekt, aber leert leere Felder einige Felder
Dies ist der Code:
-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);
}
});
});
Schemen
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);
Wieder alles funktioniert gut, aber es spart nur ein leeres Array von materias
wenn eine Erstellung newSemestre
.
Nachdem Sie 'newSemestre.materials.push (materia._id);' ausgeführt haben, können Sie einige Funktionen aufrufen, um 'newSemestre.save' zu tun, was wie erwartet funktioniert. – Shrabanee
Ich mache das am Ende –
Das wird dir nicht helfen. Weil es asynchron ist. Es wird nicht darauf warten, dass die "materia" gespeichert wird, bevor "newsemester" gespeichert wird. Es wird also ein leeres Array geben, das für das Semester gespeichert werden kann. – Shrabanee