如何从Sequelize 6.x findOne返回对象中移除fielda字段?
在Sequelize 6.x中删除findOne返回对象的指定字段
直接用delete obj.fielda无效,是因为Sequelize返回的是Model实例对象,不是普通JS对象——实例的属性是通过getter/setter关联到内部dataValues对象的,直接删除实例本身的属性不会影响实际存储的字段值。给你几个可行的方案:
转成普通JS对象后删除(推荐,不影响原实例)
用实例的get({ plain: true })方法获取纯JS对象,再删除目标字段。原实例仍保留fielda,其他场景可以正常使用:const modelInstance = await YourModel.findOne({ /* 查询条件 */ }); // 转成普通对象 const plainObject = modelInstance.get({ plain: true }); // 删除指定字段 delete plainObject.fielda; // 此时plainObject中已无fielda,原modelInstance不受影响直接操作实例的dataValues(适合需要保留实例方法的场景)
Sequelize实例的实际数据存在dataValues属性里,直接删除这个对象里的字段,后续调用toJSON()或get()时就不会包含该字段了,原实例的fieldagetter仍可在其他场景使用:const modelInstance = await YourModel.findOne({ /* 查询条件 */ }); delete modelInstance.dataValues.fielda; // 调用modelInstance.fielda仍能获取到值,但转成JSON/普通对象时会被排除通过toJSON()转成JSON对象后删除
和get()方法类似,toJSON()也会返回不含实例方法的纯数据对象,适合需要JSON格式的场景:const modelInstance = await YourModel.findOne({ /* 查询条件 */ }); const jsonObject = modelInstance.toJSON(); delete jsonObject.fielda;
内容的提问来源于stack exchange,提问作者user938363
相关产品推荐
相关产品推荐

