Javascript MongoDB不更新记录,并且在multi或upsert设置为true后承诺保持失败
我在使用mongoose更新MongoDB中的记录时遇到问题。我的代码工作,但不更新记录。请参阅下面的代码:Javascript MongoDB不更新记录,并且在multi或upsert设置为true后承诺保持失败,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我在使用mongoose更新MongoDB中的记录时遇到问题。我的代码工作,但不更新记录。请参阅下面的代码: 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, {me
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);
})
}
此代码运行,但不更新数据库中的信息。邮递员请求返回HTTP状态200 OK,并显示以下消息:
{
消息:工作类型已成功更新
}
当我把代码改成这个的时候
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”运算符在true中搜索“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;
更新方法的签名为:
Model.update(conditions, update, options, callback)
如果您想要使用承诺,那么您不应该传递回调,这样Mongoose就知道应该返回承诺。但是,您在此处传递回调参数的值true:
WorkType.update({ id: req.params.id }, { name: req.body.name }, false, true)
options参数应为object类型,但您在此处传递的值为true:
可以将对象作为选项参数传递,例如:
{ multi: true, upsert: true }
为选项和回调参数传递false(如在原始代码中)应该有效,因为如果不是truthy,它们应该被忽略。如果您可以共享工作类型,这将很有帮助。更新它可以是一个简单的定义,以了解它如何运行以及为什么会出现这些错误,更新是一个标准的MongoDB函数->我要检查自定义模块../models/WorkType是否正确实现了DB调用。我已经编辑了我的OP,您可以检查。谢谢你的帮助,我改了,现在承诺起作用了。但是字段名没有改变。我得到HTTP状态200 OK,但没有改变:哦,我的错误。Mongo将ID作为_ID发送,所以我将其更改为WorkType.update{{u ID:req.params.ID}、{name:req.body.name}、{multi:false、upsert:false},现在它正在工作!
{ multi: true, upsert: true }