在multi或upstart设置为true后,MongoDB不更新记录,promise保持失败



我在更新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,则应该被忽略。

最新更新