You need to enable JavaScript to run this app. 如何正确使用Mongoose中的findOneAndUpdate方法?
优惠活动
大模型
产品
解决方案
定价
更多

如何正确使用Mongoose中的findOneAndUpdate方法?

问题修复方案

核心问题点

  • findOneAndUpdate 同时使用 await 异步语法和回调函数属于错误用法,两种异步处理逻辑冲突,导致无法拿到正确返回值
  • 若查询条件 {"username": "dennis"} 在数据库中无匹配的Transaction文档,默认配置下该方法会直接返回null,不会抛出错误
  • findOneAndUpdate 执行时已经完成数据库写入操作,后续额外调用 .save() 属于冗余逻辑,若返回值为null时调用该方法还会直接抛出异常

修复后代码

app.post("/transaction/update", isAdmin, async (req, res) => {
  try {
    const count = req.body.count
    const date = req.body.date
    const change = req.body.change
    const service = req.body.service
    const expires = req.body.expires

    const updatedDoc = await Transaction.findOneAndUpdate(
      { username: "dennis" },
      {
        $set: {
          count: count,
          date: date,
          change: change,
          service: service,
          expires: expires
        }
      },
      { 
        new: true,
        // 若需要匹配不到文档时自动新建对应记录,开启下方配置
        // upsert: true
      }
    )
    console.log(updatedDoc)
    res.redirect("/admin")
  } catch (err) {
    console.log("更新错误:", err)
    res.status(500).send("操作失败")
  }
})

额外验证步骤

如果修改后返回值仍为null,请先手动查询数据库确认是否存在username字段值为dennis的Transaction文档,检查字段名拼写、大小写是否和查询条件完全一致。

内容的提问来源于stack exchange,提问作者UsernameFound

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 01:27:04