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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:54:02