在find中更新文档
我在使用Mongoose查找内容时遇到问题。 这个问题只是当我试图用一个对象覆盖文档(例如doc = req.body)。 但是我可以直接将原始文档的属性设置为特定的string(例如doc.name ='jason borne';)。
我已经validationres.body是一个对象,所以我不明白为什么我不能这样设置它。
Client.findById(req.params.client_id, function (err, client) { if (err) return next(new restify.InternalError(err)); // client.name = 'jason borne'; client = req.body; client.save(function(err) { if (err) return next(new restify.InternalError(err)); res.send(client); }); });
当试图将文档设置为对象时,我收到错误:
TypeError:对象#没有方法“保存”
我知道我可以使用一个简单的Client.update(…)命令进行更新,但是这种方法不允许我的模式中间件或validation运行(这在Mongoose文档中有记载 )。
有什么想法吗? 我是Node和Mongoose的新手。
您需要使用下划线的extend
方法之类的东西来将req.body
的属性复制到client
对象中,而不是像现在一样将client
重新指向req.body
。
var _ = require('underscore'); Client.findById(req.params.client_id, function (err, client) { if (err) return next(new restify.InternalError(err)); _.extend(client, req.body); client.save(function(err) { if (err) return next(new restify.InternalError(err)); res.send(client); }); });
你现在正在得到的症状是由于你正在用一个简单的json对象来replace一个mogoose模型对象(像保存,查找等方法),这是从你的身体parsing出来的,这是缺lesssave
。
尝试做一个更新,而不是查找/保存。
Client.update({_id: req.params.client_id}, {$set : req.body}, function(err) {...});
或者尝试将你的req.body
合并到client
对象。