You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mongoose查询时关联文档的_id每次请求都变动是什么原因

关联嵌套对象_id异常变动的常见原因

  • 存在隐式重建关联文档的业务逻辑:如果你的接口代码中包含兜底逻辑,例如查询Section后发现categories关联数据不符合预期,就删除原有Category文档重新插入新文档,会导致每次请求关联的Category _id都会刷新,Section本身仅更新categories数组的引用值,自身_id保持不变。你可以直接在MongoDB Shell中查询对应Section文档的categories数组存储值,确认数据库内的实际引用是否每次都发生变化,即可验证该问题。
  • populate 自定义转换逻辑错误:如果你查询时使用了populate('categories')填充关联数据,且自定义了transform转换函数,错误地在转换逻辑中生成新的ObjectId赋值给返回的_id字段,会出现每次接口返回的_id不一致的假异常,实际数据库内的存储值是正常的。
  • 关联插入逻辑不符合预期:你当前的Schema定义是将Category作为独立集合做关联引用的标准写法,但如果插入数据时没有预先独立保存Category文档获取_id,而是直接把完整Category对象塞入Section的categories数组,Mongoose会将其识别为嵌套子文档,默认给每个嵌套子文档自动生成新的_id,每次序列化返回时都会生成新值,导致_id变动。
  • 全局响应中间件逻辑错误:如果你配置了全局的响应序列化中间件(例如统一将_id转换为id字段返回),中间件逻辑存在bug会导致嵌套对象的_id字段被错误修改,每次返回的值都不一样。

内容的提问来源于stack exchange,提问作者Marcos Álvarez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:27:00