Ich habe App, wo ich versuche zu überprüfen, ob ein Dokument mit der Benutzer-ID bereits vorhanden ist, dann aktualisieren Sie das vorhandene mit den Daten gesendet Wenn die Anfrage nicht existiert, erstellen Sie ein neues Dokument.Überprüfen Sie, ob das Dokument bereits existiert und wenn ja, dann aktualisieren Sie, neu erstellen - Mongoose
Ich habe dies bisher getan:
Bio.findOne({userID: req.body.userID}, function(err, bio) {
if (err) {
console.log("The error while updating colleciton is " + err);
}
// if already exists then update it
if (bio) {
console.log("Bio document for user already exists!");
bio.userBios = {
$push: {
background: req.body.userBios.background,
experience: req.body.userBios.experience,
skills: req.body.userBios.skills,
bioForSector: req.body.userBios.bioForSector
}
}
bio.save(function(err) {
if (err)
throw err
return (null, bio)
})
}
//if does not exist then create new
if (!bio) {
console.log("Bio document for user does NOT exist! creating new");
var bio = new Bio();
bio.firstName = req.body.firstName;
bio.lastName = req.body.lastName;
bio.jobTitle = req.body.jobTitle;
bio.userID = req.body.userID;
bio.userBios = {
background: req.body.userBios.background,
experience: req.body.userBios.experience,
skills: req.body.userBios.skills,
bioForSector: req.body.userBios.bioForSector
};
// save the bio
bio.save(function(err) {
if (err)
throw err;
return (null, bio);
});
}
});
Die Frage:
Ich kann erfolgreich ein neues Dokument erstellen, aber wenn ich versuche, es zu aktualisieren, überschreibt er den ganzen userBios
Array anstatt es zu aktualisieren.
My Document Schema:
// define the schema for our bios model
var biosSchema = mongoose.Schema({
firstName: String,
lastName: String,
jobTitle: String,
userID: String,
userBios: [{bioForSector: String, background: String, skills: [String], experience: {}}]
});
Was mache ich falsch? Kann jemand helfen? es wird sehr geschätzt!
Was meinen Sie mit _überschreibt das ganze Dokument_? Welche Bedingung wird erfüllt? – Rayon
@RayonDabre Wenn der Benutzer ein neues Dokument erstellt, enthält es den "Hintergrund, Fähigkeiten, Erfahrung" für die erste Biographie, aber wenn der Benutzer es aktualisiert, dann drückt der neue "Hintergrund, Fähigkeiten, Erfahrung" als neues Objekt in den 'userBios' Array innerhalb des Schemas überschreibt es das vorherige mit allen Nulldaten. Das bedeutet, dass die Variablen "background, skills, experience" in der Datenbank in "null" geändert werden. Hilft das? – Skywalker
@RayonDabre Ich habe meine Formulierung ein wenig geändert, ich meine, es überschreibt das ganze "userbios" -Array, anstatt es zu aktualisieren, indem ein neues Objekt hineingeschoben wird. – Skywalker