如何访问Mongoose填充字段?为何assignedUser.first读取报错?
Mongoose填充字段读不到属性?看这几点
为啥会这样?
这是因为Mongoose返回的不是普通JS对象,是它自己的文档实例(Document)。你用console.log(booking.assignedUser)的时候,Node.js会自动展开显示文档内部_doc里的真实数据,但这个assignedUser本身还是Mongoose的文档对象,不是纯JS对象,直接去读first属性就会报错。
另外还有可能是:
- 填充操作没完全完成,或者查询时
populate的写法有问题,比如没指定要填充的字段,导致表面上看到数据,但实际属性还没被序列化出来。 - Mongoose的getter/setter机制在搞鬼,直接访问属性时没触发正确的读取逻辑。
怎么解决?
转成普通JS对象:用
toObject()或toJSON()把文档转成纯JS对象,之后就能正常读属性了:const bookingObj = booking.toObject(); console.log(bookingObj.assignedUser.first);检查populate是否正确:确保查询时的
populate指定了需要的字段,比如:const booking = await Booking.findById(bookingId).populate('assignedUser', 'first');要是没指定字段,Mongoose可能只填充了
_id,控制台打印时的完整数据其实是懒加载出来的,属于视觉误导。用get方法读取:直接调用Mongoose文档的
get方法来读嵌套属性:console.log(booking.get('assignedUser.first'));
内容的提问来源于stack exchange,提问作者naossoan
相关产品推荐
相关产品推荐

