无法将属性添加到json对象

我试图添加状态到成功更新的响应,但我无法将状态属性添加到窗体的json对象。 这是我的代码

apiRouter.post('/forms/update', function(req, res){ if(req.body.id !== 'undefined' && req.body.id){ var condition = {'_id':req.body.id}; Form.findOneAndUpdate(condition, req.body, {upsert:true}, function(err, form){ if (err) return res.send(500, { error: err }); var objForm = form; objForm.status = "saved successfully"; return res.send(objForm); }); }else{ res.send("Requires form id"); } }); 

这是我得到的回应,通知状态丢失

 { "_id": "5580ab2045d6866f0e95da5f", "test": "myname", "data": "{\"name\":3321112,\"sdfsd\"344}", "__v": 0, "id": "5580ab2045d6866f0e95da5f" } 

我不知道我错过了什么。

尝试以.toObject()的forms:

 Form.findOneAndUpdate(condition, req.body, {upsert:true}, function(err, form){ if (err) return res.send(500, { error: err }); var objForm = form.toObject(); objForm.status = "saved successfully"; return res.send(objForm); }); 

mongoose的查询结果是不可扩展的(对象被冻结或密封),所以你不能添加更多的属性。 为了避免这种情况,您需要创build对象的副本并对其进行操作:

 var objectForm = Object.create(form); objectForm.status = 'ok'; 

尝试将res.send(objForm)更改为res.send(JSON.stringify(objForm)) 。 我怀疑Mongoose模型有一个自定义的toJson函数,所以当你返回它时,它正在以某种方式转换响应。

希望上面的帮助。

只需创build一个容器。

 array = {}; Model.findOneAndUpdate(condition, function(err, docs){ array = docs; array[0].someField ="Other"; });