我要从嵌入的文档更新某些字段数据时遇到问题。如果不更新整个文档,则无法更新特定字段。如果高级有建议如何解决此问题的最佳方法。我真的很感激。
这是我的请求数据:
{
"userstatus": "tidak aktif",
"password": "lukeskywalker"
}
这是我的用户架构(模型):
'use strict';
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const Attributes = new Schema({
username:{type:String,unique:true,required:true,trim:true},
email:{type:String,unique:true,required:true,trim:true},
password:{type:String,required:true},
hashpassword:{type:String},
oldpassword:{type:String},
salt:{type:String},
usertype:{type:String,enum:['bisnis','personal']},
userstatus:{type:String,enum:['aktif','tidak aktif','banned'],default:'tidak aktif'}
}, {_id:false});
const UsersSchema = new Schema({
"type":{type:String, default:'users'},
"attributes":Attributes
});
module.exports = mongoose.model('Users',UsersSchema);
这是我编辑用户文档的代码:
//...update user
exports.editUsers = (req, res) => {
let id = req.params.id;
let body = req.body;
let attrTemp = {attributes:{}};
//...get key
Object.keys(body).forEach((key) => {
attrTemp.attributes[key] = body[key];
});
UsersModel.findOneAndUpdate(
{"_id":id, "attributes.username":result.attributes.username},
attrTemp.attributes,
(err, result) => {
if (err) {
res.json(err);
};
res.json(result);
});
};
当我这样做时,此示例代码有效:
//...update user
exports.editUsers = (req, res) => {
let id = req.params.id;
let body = req.body;
UsersModel.findOneAndUpdate(
{
"_id":id,
"attributes.username":result.attributes.username
},
{
//...hardcode to sample
"attributes.userstatus":"tidak aktif",
"attributes.password":"password"
},
(err, result) => {
if (err) {
res.json(err);
};
res.json(result);
}
);
};
我只想更新发送请求更新的特定字段。不是我的全部属性。如何做到这一点的最佳方法。
谢谢。
答案 0 :(得分:0)
我从这个Node.js - Mongoose - Update nested array with all values in req.body
得到了答案这是我的代码:
//...update user
exports.editUsers = (req, res) => {
let id = req.params.id;
let body = req.body;
let updateObj = {$set:{}};
//...get key
Object.keys(body).forEach((key) => {
updateObj.$set['attributes.' + key] = body[key];
});
UsersModel.update({'_id':id}, updateObj, (err, result) => {
if (err) {
res.json(err);
}
res.json(result);
});
};
谢谢。