Mongoose中driver_id字段无法更新问题求助
解决Mongoose更新时driver_id字段无法添加的问题
可能的原因及解决方案
1. 显式使用$set操作符
Mongoose的findOneAndUpdate虽默认会转换为$set操作,但显式声明可避免潜在解析问题,确保字段被正确更新:
await ordersModel.findOneAndUpdate( { "_id": id }, { $set: { driver_id: driver._id, order_note: "updated" } }, { new: true } // 返回更新后的文档,方便验证结果 )
2. 验证driver._id的有效性
确保driver._id是有效的Mongoose ObjectId类型:
- 若
driver._id为字符串,需先转换为ObjectId:const mongoose = require('mongoose'); const validDriverId = mongoose.Types.ObjectId(driver._id); await ordersModel.findOneAndUpdate( { "_id": id }, { $set: { driver_id: validDriverId, order_note: "updated" } }, { new: true } ) - 可通过
mongoose.Types.ObjectId.isValid(driver._id)验证ID格式是否正确。
3. 检查更新选项与中间件
- 添加
runValidators: true选项,确保更新时触发Schema验证(排查隐性验证问题):await ordersModel.findOneAndUpdate( { "_id": id }, { $set: { driver_id: driver._id, order_note: "updated" } }, { new: true, runValidators: true } ) - 排查是否存在
pre('update')或pre('findOneAndUpdate')钩子函数,阻止了driver_id字段的更新。
4. 确认数据库文档结构
直接查看MongoDB中的目标订单文档,确认不存在同名但类型不匹配的字段(如字符串类型的driver_id),或文档未被设置严格Schema模式导致无法添加新字段。
内容的提问来源于stack exchange,提问作者Parag Gupta
相关产品推荐
相关产品推荐

