Node.js+MongoDB更新数据时空字段自动设为null的实现方法
问题原因
你当前代码的核心问题是没有对未输入的字段做主动的空值转换:
- 当用户未输入对应字段时,
request中对应属性为undefined,Mongoose 执行$set操作时会自动跳过值为undefined的字段,不会将其更新为你需要的null - 如果前端传递了空字符串作为无输入的标识,你也没有做转换处理,会直接存入空字符串不符合需求
修复后的代码
// 空值转换工具方法:无输入的内容统一返回null const getValueOrNull = (val) => { if (val === undefined || val === null || (typeof val === 'string' && val.trim() === '')) { return null } return val } exports.updatingUser = async (user_, request, res) => { try { const updateUserInfo = { fullName: getValueOrNull(request.fullName), userName: getValueOrNull(request.userName), email: getValueOrNull(request.email), password: getValueOrNull(request.password), profileImage: getValueOrNull(request.profileImage), backgroundImage: getValueOrNull(request.backgroundImage) } const result = await User.updateOne({ _id: request._id }, { $set: updateUserInfo }).exec() return result } catch (err) { res.status(500).json({ error: err }) } }
如果你的业务场景中允许字段值为0、false这类合法假值,调整getValueOrNull的判断条件即可。
内容的提问来源于stack exchange,提问作者user16657608
相关产品推荐
相关产品推荐

