Node.js中如何用for-of循环更新对象?新增priority属性不生效问题
问题原因
你调用User.find()返回的是Mongoose文档实例数组,而非普通JS对象,Mongoose默认开启strict模式,不允许直接给文档实例新增schema中未定义的属性,所以你直接赋值i.priority = counter不会被保存到实例上,打印自然看不到新增属性。
解决方案
推荐以下两种常用的解决方式:
- 方式1:查询时直接返回普通JS对象(性能更高,适合只读场景)
只需要在查询语句后追加.lean()方法即可,修改对应代码行:
其余代码无需调整,直接给返回的普通对象加obj.users = await User.find(req.user._id).lean();priority属性即可生效。 - 方式2:使用Mongoose内置
set方法添加属性(适合需要后续操作文档实例的场景)
不需要修改查询语句,只需要调整属性赋值的写法:
第三个参数// 把原来的i.priority = counter;替换为下面的代码 i.set('priority', counter, { strict: false });{ strict: false }表示临时关闭严格模式,允许新增schema外的属性。
内容的提问来源于stack exchange,提问作者Saad8113
相关产品推荐
相关产品推荐

