猫鼬在instance.update()

时间:2019-08-16 05:25:59

标签: node.js mongodb mongoose

我正在执行猫鼬Model.findById()函数,以通过使用快速路由返回单个实例。

Model.findById(modelid)
        .then(instance => {
            if(instance.isOwnedBy(user)) {
                return instance.update({$push: {days: req.params.dayid}}, {new: true})
                               .then(foo => res.send(foo))
            } else {
                res.status(401).send("Unauthorized")
            }
        })

上面的代码返回一个包含opTime, electionId...etc的对象,而不是返回新更新的文档实例。在instance.update()方法之后,如何返回最新更新的文档

1 个答案:

答案 0 :(得分:1)

如果可以将instance.isOwnedBy(user)_id: modelid合并到一个mongo查询中,则最好使用findOneAndUpdate(),但是这样一来,如果找不到任何匹配的文档,则无法知道查询的哪一部分导致找不到。

由于我对您的模型,条件不了解太多,所以我无法回答如何使用findOneAndUpdate()进行操作,但是还有另一种修改文档并调用save()方法的方法。 / p>

基于您的代码的示例:

Model.findById(modelid)
    .then(instance => {
        if(instance && instance.isOwnedBy(user)) {
            if(instance.days) instance.days.push(req.params.dayid);
            else instance.days = [req.params.dayid];
            instance.save().then(function(instance){
              res.send(instance);
            })
        } else {
            res.status(401).send("Unauthorized")
        }
    })

注意:修改实例之前,应检查实例是否存在。