Nach vielen gescheiterten Versuchen, meine Logik zu korrigieren, suche ich nach Hilfe.Mongoose speichert keine Daten in mLab
Ich benutze Knoten, Express, Passport, Mongoose, MongoDB, um eine Anwendung zu erstellen. Bisher ein Benutzer sich anmelden können und melden Sie sich an, wenn sich der Benutzer auf sie dieses Schema definiert sind.
var userSchema = mongoose.Schema({
local : {
username : String,
password : String,
},
jobs : [{ type: mongoose.Schema.Types.Mixed }]
});
den Benutzer Speichern wird durch das getan:
var newUser = new User();
// set the user's local credentials
newUser.local.username = username;
newUser.local.password = newUser.generateHash(password);
newUser.jobs = [];
// save the user
newUser.save(function(err) {
if (err) {
console.log(err);
throw err;
}
console.log('user saved: ', newUser);
return done(null, newUser);
});
die in diesem MongoDB Ergebnisse doc:
{
"_id": {
"$oid": "596a436a2981ab1729a4f08b"
},
"local": {
"password": "$2a$08$TV2rADNbm302cREGRzfRFOtZF4mA8kYCeBjcmalPCk./flUO3wM.6",
"username": "kev"
},
"__v": 0
}
Beachten Sie die fehlenden Arbeitsplätze Eintrag. Ich glaube nicht, dass ein Problem sein würde, obwohl, wenn ich jetzt die doc versuchen Aktualisierung durch einen Job Zugabe mit:
User.findOne(
{ 'local.username': req.user.username },
// { $push: { 'jobs':{'website': req.body.joblink } } },
// { returnNewDocument: true },
function(err, user) {
// if there are any errors, return the error
if (err) {
console.log(err);
return done(err);
} else {
user.jobs = [];
user.jobs.push({'website': req.body.joblink});
console.log(user.jobs);
user.save(function(err) {
if (err) {
console.log(err);
throw err;
}
console.log('user updated: ', user);
res.redirect('/profile');
});
}
});
Der Mongo doc unverändert ist, während die
console.log (‘ Benutzer aktualisiert: ', Benutzer);
zeigt das korrekte Dokument an.
Sie * sagen: „Das Mongo doc ist unverändert“ * aber wo suchen Sie tatsächlich auf das Dokument? Dieser Code versucht nicht, das geänderte Dokument zu lesen. Wenn Sie die Daten "manuell" betrachten, stellen Sie Folgendes sicher: 1. Sie betrachten tatsächlich dasselbe Dokument, von dem Sie glauben, dass es modifiziert wird (beachten Sie, dass nichts ".findOne()" stoppt und nur "eins" von vielen auswählt mögliche Dokumente). 2. Dass Sie tatsächlich die richtige Sammlung betrachten, da Mungo-Modelle standardmäßig den Sammlungsnamen "Plural" verwenden, in diesem Fall "Benutzer", wobei "Benutzer" als Modellname angegeben wird. –
Ich schaue mir das Dokument in mLab an, das ich für meinen Datenbankspeicher verwende. Ich schaue definitiv auf das gleiche Dokument, das ich modifiziere, da es keine doppelten Benutzer in der Benutzersammlung geben sollte. Wenn ich die Sammlung korrekt erstellt habe, habe ich eine Sammlung namens users erstellt, in der Dokumente namens User gespeichert werden, in der das Schema-Modell oben angezeigt wird. – klewis