Node.js Mongoose在instance.update()之后获取更新的文档

Node.js Mongoose在instance.update()之后获取更新的文档,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正在执行mongoose Model.findById函数,以便通过使用快速路由返回单个实例 Model.findById(modelid) .then(instance => { if(instance.isOwnedBy(user)) { return instance.update({$push: {days: req.params.dayid}}, {new: true})

我正在执行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…等的对象,而不是返回新更新的文档实例。如何在instance.update方法之后返回新更新的文档?

如果instance.isOwnedByuser和_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")
        }
    })

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

@srinivasy它确实从docs:Model中更新了文档。update更新了数据库中的一个文档,但没有返回它。@cuongroc,即使我在文档实例而不是模型上调用它?是否有一个函数返回新更新的文档?也许您可以使用相同的选项{new:true}查找doneAndupdate以返回新文档,因为更新只返回写入结果!!由于这里有附加条件instance.isOwnedByuser,能否将其转换为一个mongoose查询?