gpt4 book ai didi

node.js - Mongoose 未将数据保存到 mLab

转载 作者:太空宇宙 更新时间:2023-11-04 02:03:33 24 4
gpt4 key购买 nike

在多次尝试纠正我的逻辑失败后,我求助于寻求帮助。

我正在使用 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 文档的结果是:

{
"_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');
});
}
});

Mongo 文档没有变化,而

console.log('user updated: ', user);

显示正确的文档。

最佳答案

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: []
}

});

更新 schema 后,当您第一次保存文档时,如果您没有以 json 形式传递作业,它将自动创建一个默认数组。

之后您可以使用 $push 来更新作业

关于node.js - Mongoose 未将数据保存到 mLab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45120713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com