You need to enable JavaScript to run this app. Mongoose中findOneAndUpdate是否支持用同文档其他字段值更新数据
优惠活动
大模型
产品
解决方案
定价
更多

Mongoose中findOneAndUpdate是否支持用同文档其他字段值更新数据

解答

核心结论

你提到的需求可以实现,你原有写法无法生效的原因是直接写test.email会读取Node.js运行环境上下文的变量,而不是MongoDB中待更新文档的字段值,需要使用聚合管道形式的更新语法才能引用文档内的字段完成操作。

正确实现代码

await UserModel.findOneAndUpdate(
  {
    'test.token': token,
  },
  // 数组包裹代表使用聚合管道更新,MongoDB 4.2+ 支持该语法
  [
    {
      $set: {
        email: "$test.email", // 用$+字段路径引用当前文档的test.email字段值
        test: null
      }
    }
  ],
  // 可选配置:返回更新后的文档,默认返回更新前的旧文档
  { new: true }
)

补充说明

  • 从MongoDB 4.2版本开始,findOneAndUpdate、updateOne、updateMany等更新方法均支持传入聚合管道作为第二个参数,允许在更新逻辑中引用待更新文档自身的字段值。
  • 引用文档字段时需要添加$前缀拼接字段路径,比如"$test.email"就指代当前待更新文档下test对象的email字段值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 10:15:08