我在更新MongoDB中的记录时遇到了问题(使用mongoose)。我的代码可以工作,但不会更新记录。请参阅以下代码:
edit(req, res, next) {
var WorkType = require('../models/WorkType');
WorkType.update({id: req.params.id}, {name: req.body.name}, false, false)
.then(workType => {
res.send(200, {message: 'Work Type updated successfully'});
})
.catch(err => {
return next(err);
})
}
此代码运行,但不会更新数据库中的信息。POSTMAN请求返回HTTP状态200 OK,并显示消息:
{"message":"工作类型更新成功"}
当我将代码更改为此时
WorkType.update({id: req.params.id}, {name: req.body.name}, false, true)
我有这个错误:
TypeError:无法读取未定义的属性'then'
投掷者;//未处理的"错误"事件
TypeError:callback.apply不是函数
如果我将代码更改为以下代码:
WorkType.update({id: req.params.id}, {name: req.body.name}, true, false)
我有错误:
TypeError:无法使用"in"运算符在真正的中搜索"strict">
你能帮我找出问题出在哪里吗?或者为什么promise不能使用第二个代码?非常感谢你的帮助!
WorkType.js
var mongoose = require('mongoose');
var WorkTypeSchema = new mongoose.Schema({
name: {
type: String,
unique: true,
required: true
}
})
var WorkType = mongoose.model('WorkType', WorkTypeSchema);
module.exports = WorkType;
update方法的签名为:
Model.update(conditions, update, options, callback)
如果您想使用promise,那么不应该传递回调,这样Mongoose就知道要返回promise。但是,您在此处传递回调参数的值true:
WorkType.update({ id: req.params.id }, { name: req.body.name }, false, true)
options参数的类型应为对象,但您在此处传递的值为true:
WorkType.update({ id: req.params.id }, { name: req.body.name }, true, false)
您可以传递一个对象作为选项参数,例如:
{ multi: true, upsert: true }
为选项和回调参数传递false,就像在原始代码中一样,如果它们不是truthy,则应该被忽略。