在多次尝试纠正我的逻辑失败后,我求助于求助。
我使用Node,Express,Passport,Mongoose,MongoDB来创建应用程序。到目前为止,用户可以注册并登录。当用户注册时,它们由此架构定义:
$routes->connect('/', ['controller' => 'Pages', 'action' => 'index','index']);
通过以下方式保存用户:
var userSchema = mongoose.Schema({
local : {
username : String,
password : String,
},
jobs : [{ type: mongoose.Schema.Types.Mixed }]
});
这导致了这个MongoDB文档:
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);
});
注意缺少的工作条目。我不认为那会是一个问题,但是,现在当我尝试使用以下命令添加作业来更新文档时:
{
"_id": {
"$oid": "596a436a2981ab1729a4f08b"
},
"local": {
"password": "$2a$08$TV2rADNbm302cREGRzfRFOtZF4mA8kYCeBjcmalPCk./flUO3wM.6",
"username": "kev"
},
"__v": 0
}
时,Mongo文档没有变化
console.log('用户已更新:',用户);
显示正确的文档。
答案 0 :(得分:0)
You should use findOneAndUpdate() method of mongodb
https://docs.mongodb.com/v3.2/reference/method/db.collection.findOneAndUpdate/
Like that
var json = {'website': req.body.joblink};
User.findOneAndUpdate(
{ 'local.username': req.user.username },
{ $push: { jobs: json });
您必须更新架构: -
var userSchema = mongoose.Schema({
local : {
username : String,
password : String,
},
jobs : {
type: Array,
default: []
}
});
更新架构后,当您第一次保存文档时,如果您没有在json中传递作业,它将自动创建一个默认数组。
之后,您可以使用$ push更新作业