【问题标题】:Mongoose get updated document after instance.update()Mongoose 在 instance.update() 之后获取更新的文档
【发布时间】:2019-08-16 15:40:57
【问题描述】:

我正在执行一个猫鼬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() 方法之后返回新更新的文档

【问题讨论】:

  • @srinivasy 它确实更新了文档
  • 来自文档:Model.update() Updates one document in the database without returning it.
  • @CuongLeNgoc 即使我在文档实例而不是模型上调用它?有没有返回新更新文档的函数?
  • 也许您可以使用相同的选项 {new:true} findOneAndUpdate() 以返回新文档,因为更新只会返回写入结果!
  • 你这里instance.isOwnedBy(user)有附加条件,可以转换成一个mongoose查询吗?

标签: node.js mongodb mongoose


【解决方案1】:

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

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

基于您的代码的示例:

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")
        }
    })

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

【讨论】:

    猜你喜欢
    • 2021-04-25
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 2018-12-22
    • 2015-02-19
    相关资源
    最近更新 更多