我尝试通过添加firstName
和lastName
来更新我的DB文档,但是当我使用我的函数时,它实际上会覆盖所有内容。举个例子,我的对象现在看起来像这样
{
"_id" : ObjectId("5b0df225287cc77612ed89a5"),
"email" : "user@user.com",
"password" : "$2HbyP4.ts9O/zrjV5Pcd/Z28bhOb8oGas9wEG",
"userData" : [
{
"role" : "user",
"phone" : 747483245,
"_id" : ObjectId("5b0df225287cc77612ed89a6"),
"address" : [
{
"_id" : ObjectId("5b0df225287cc77612ed89a7")
}
]
}
],
"__v" : 0
}
但是当我更新它时,它看起来是这样的
{
"_id" : ObjectId("5b0df225287cc77612ed89a5"),
"email" : "user@user.com",
"password" : "$2HbyP4.ts9O/zrjV5Pcd/Z28bhOb8oGas9wEG",
"userData" : [
{
"firstName" : "First Name",
"lastName" : "Last Name",
"_id" : ObjectId("5b0df225287cc77612ed89a6"),
"address" : [
{
"_id" : ObjectId("5b0df225287cc77612ed89a7")
}
]
}
],
"__v" : 0
}
所以我不再有role
和phone
,这是我的函数
// Update user data
exports.update = function (req, res, next) {
User.findByIdAndUpdate(req.user._id, req.body)
.exec()
.then(doc => res.json(doc))
.catch(err => res.json(err))
}
发布于 2018-05-30 10:27:16
尝试这样做:
exports.update = function (req, res) {
User.findByIdAndUpdate(req.user._id, { $set: { firstName: req.body.firstName , lastName:req.body.lastName }}, {upsert:true},function(err,user){
if(err){
res.json(err);
}else{
res.json(user);
}
}
}
发布于 2018-05-30 17:45:49
试试这个
exports.update = (req, res) => {
const query = {_id: req.user._id},
update = { $set: {
"userData.$.firstName": req.body.firstName,
"userData.$.lastName": req.body.lastName }
},
options = { upsert:true };
User.findByIdAndUpdate(query, update, options)
.exec()
.then(user => res.json(user))
.catch(err => res.json(err));
}
https://stackoverflow.com/questions/50595295
复制相似问题