經過多次嘗試糾正我的邏輯失敗後,我訴諸於尋求幫助。Mongoose沒有將數據保存到mLab
我正在使用Node,Express,Passport,Mongoose,MongoDB來創建應用程序。到目前爲止,用戶可以註冊並登錄,當用戶註冊將被此架構定義:
var userSchema = mongoose.Schema({
local : {
username : String,
password : String,
},
jobs : [{ type: mongoose.Schema.Types.Mixed }]
});
保存用戶通過這個工作:
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);
});
導致這個的MongoDB doc:
{
"_id": {
"$oid": "596a436a2981ab1729a4f08b"
},
"local": {
"password": "$2a$08$TV2rADNbm302cREGRzfRFOtZF4mA8kYCeBjcmalPCk./flUO3wM.6",
"username": "kev"
},
"__v": 0
}
注意丟失的作業條目。我不認爲這是一個問題,雖然,現在當我嘗試通過添加作業更新文檔:
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');
});
}
});
蒙戈文檔是不變的,而
的console.log(」用戶更新:',用戶);
顯示正確的文檔。
您說*「Mongo文檔不變」*但您在哪裏查看文檔?此代碼不會嘗試讀取已修改的文檔。如果您正在手動查看數據,請確保:1.您實際上正在查看您認爲正在修改的相同文檔(請注意,沒有什麼能夠停止'.findOne()'只選擇多個「可能的文件)。 2.你實際上是在查看正確的集合,因爲默認情況下貓鼬模型默認使用「複數」集合名稱,在這種情況下,''用戶''給出'User''作爲模型名稱。 –
我正在查看mLab中用於存儲數據庫的文檔。我肯定正在查看我正在修改的文檔,因爲在用戶集合中不應該有重複的用戶。如果我正確創建了集合,我創建了一個名爲users的集合,它將存儲稱爲User的文檔,其中架構模型顯示在上面。 – klewis