为什么findByIdAndUpdate不更新文档?

时间:2020-05-06 19:24:18

标签: javascript mongodb typescript mongoose

我对以下功能有疑问

export function updateLine(req: Request, res: Response) {
    if (!req.params.id || !req.body) return res.status(400).send({ message: 'Client has not sent params' });
    Line.findByIdAndUpdate(req.params.id, req.body, async (err, lineUpdated) => {
        console.log("req.params.id", req.params.id)
        console.log("lineUpdated", lineUpdated)
        console.log("req.body", req.body)
        if (err) return res.status(409).send({ message: 'Internal error, probably error with params' });
        if (!lineUpdated) return res.status(404).send({ message: 'Document not found' });
        if (req.params.id !== lineUpdated.id) await Key.updateMany({ 'line': req.params.id }, { 'line': lineUpdated._id }).exec(err => {
            if (err) return res.status(500).send({ message: 'Key Internal Server Error' });
        });
        return res.status(200).send({ data: lineUpdated });
    });
}

我想做的就是用包含req.params.id的内容更新文档req.body

对显示的console.log()的响应如下

req.params.id ACCSEH
lineUpdated {
  _id: 'ACCSEH',
  name: 'Accesorios (SEH)',
  started: 2020-04-21T20:25:10.395Z,
  __v: 0
}
req.body { id: 'ACCSEJ', name: 'Accesorios (SEH)' }

我做错了什么?

我已经知道lineUpdated将在更改之前将函数返回给我。我的意思是,当我执行查询以查看更改时,没有任何改变

enter image description here

2 个答案:

答案 0 :(得分:0)

通过ID查找和更新时,您不能在对象中为其赋予ID-您需要为其提供一个具有其他项(名称,开头,_v)的某种组合的对象。

答案 1 :(得分:0)

参考documentation

保留字段名称_id用作主键;它的价值 在集合中必须唯一,不可变并且可以是任何类型 除了数组之外。

_id字段插入集合后,您将无法更改