Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MongoDB不更新记录,并且在multi或upsert设置为true后承诺保持失败_Javascript_Node.js_Mongodb - Fatal编程技术网

Javascript MongoDB不更新记录,并且在multi或upsert设置为true后承诺保持失败

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

我在使用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, {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 }