更新查找中的文档
Updating document within find
我在使用Mongoose从查找中更新文档时遇到问题。只有当我试图用对象(例如doc = req.body)覆盖文档时,问题才会出现。然而,我能够直接将原始文档的属性设置为特定的字符串(例如doc.name = 'jason borne';)。
我已经验证了res.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: object#没有save方法
我知道我可以用一个简单的Client.update(…)命令进行更新,但是这个方法不允许我的模式中间件或验证运行(这在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对象替换mogoose模型对象(使用save, find等方法),而该对象缺少save
。
尝试更新而不是查找/保存。
Client.update({_id: req.params.client_id}, {$set : req.body}, function(err) {...});
或者尝试将req.body
合并到client
对象。
相关文章:
- 在与 IE8 兼容的文档片段中查找数据
- MongoDB findAndModify:>>>查找和更新文档数组中的对象
- 使用 Mongoose 在所有现有集合中查找引用的文档
- 查找文档,然后在数组中查找条目并将其从数组中删除
- 查找系列中的下一个HTML文档
- 查找包含子对象MongoDb和Node.js的特定字段的文档
- 使用 shift 在具有字符串/数组的文档中查找元素
- 在MongoDB和Node.js中查找某个字段具有与对象完全相同元素的文档
- Expressjs Mongoose 查找嵌套的嵌入式文档未定义
- MONGO 查找数组中至少有一个项目不在另一个项目中的文档
- MongoDB with Mongoose - 仅查找某些子文档
- 如何在文档中查找数字并计算(更改原始数字)
- 如何禁用或阻止 ReactJS 在服务器端呈现时查找文档
- mongoDB:在具有父引用的模型树结构中查找缺失的文档
- 搜索文档并查找所有带有标题的输入
- Mongo 和 Node.js:通过使用 UUID (GUID) _id查找文档
- 使用 JS 查找和替换文档中的特定文本字符
- Chrome快速查找(ctrl+f)重新定位文档中的元素
- MongoDB按日期范围查找文档-JavaScript
- 描述类查找或创建mongo文档