为什么诺言不会返回更新的记录

时间:2018-03-18 13:30:58

标签: javascript node.js promise

当我填写表单时,接下来我将其作为对象发送给API NodeJS。这是执行功能

.post('/create/card', function (req, res) {
    var rb = req.body,
        obj = {
            query: {
                $set: {
                    ['lists.' + rb.cardIndex + '.cards']: rb.cards
                },
                $push: {
                    activity: { $each: [rb.activity], $position: 0 }
                }
            },
            idBoard: rb.idBoard
        }

    Board.updateBoard(obj)
        .then((updated) => { 
            res.send(updated);
        })
})

Board.updateBoard(obj)在Board.model中调用它的函数

module.exports.updateBoard = function (obj) {
  return new Promise((resolve, reject) => { 
    Board.findOneAndUpdate({ _id: obj.idBoard }, obj.query, { upsert: true })
      .then((updated) => { 
        resolve(updated);
      })
      .catch((err) => {
        console.log(err);
      })
  });
};

更新后的这个函数,应该将更新的对象返回给第一个函数,她应该向客户端发送响应,但是在更新的版本对象中是...在更新之前返回对象。有人能告诉我为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

findOneAndUpdate如果文档已存在,则始终返回旧文件;如果文档不存在,则返回 null

如果您想要返回更新的文档,那么有一个选项可用 returnNewDocument

returnNewDocument :如果为true,则返回更新的文档而不是原始文档。默认值为 false

参考:https://docs.mongodb.com/manual/reference/method/db.collection.findOneAndUpdate/

相关问题