Syl*_*Syl 5 mongoose node.js express
我正在尝试使用Mongoose更新现有记录.插入是正常但不是更新.
这是我的片段:
app.post('/submit', function(req, res) {
var my_visit = new models.visits({
date: req.body.visit_date,
type: req.body.visit_type,
agency: req.body.visit_agency,
city: req.body.visit_city,
url: req.body.visit_url,
note: req.body.visit_note
});
// INSERT
if(req.body.id == 0) {
my_visit.save(function(err) {
if(err) { throw err; }
console.log('added visit');
res.redirect('/');
});
} else { // UPDATE
var upsertData = my_visit.toObject();
console.log(req.body.id); // OK
models.visits.update({ _id: req.body.id }, upsertData, { multi: false }, function(err) {
if(err) { throw err; }
console.log('updated visit: '+ req.body.id);
res.redirect('/');
});
}
})
Run Code Online (Sandbox Code Playgroud)
回应是Mod on _id is not allowed.
我只想更新WHERE id = idMySQL中的行.我找不到合适的语法.
ver*_*loc 15
根据这个问题和另一个问题,Mod on _id is not allowed当一个人试图根据它的id更新一个对象而不首先删除它时,会发生这种情况.
我还发现了这个试图解释解决方案的github问题.它明确指出:
注意不要将现有的模型实例用于update子句(这不起作用,并且可能导致像无限循环这样的奇怪行为).此外,请确保update子句没有_id属性,这会导致Mongo返回"Mod on _id not allowed"错误.
似乎解决方案是执行以下操作:
var upsertData = my_visit.toObject();
console.log(req.body.id); // OK
delete upsertData._id;
models.visits.update({ _id: req.body.id }, upsertData, { multi: false }, function(err) {
if(err) { throw err; }
//...
}
Run Code Online (Sandbox Code Playgroud)
在旁注中,您可以重写路由以执行create和update,而不使用if-else子句.update()需要一个额外的选项upsert,根据文档:
upsert(boolean)是否创建doc,如果它不匹配(false)
| 归档时间: |
|
| 查看次数: |
24379 次 |
| 最近记录: |