Mongoose+Express更新数据库报错:Cast to string failed for value 解决方法
问题:Mongoose+Express更新数据时出现“Cast to string failed for value”错误
错误原因
- 查询条件类型不匹配:你的查询语句
{ key: { key: keyPassed } }把key字段设成了嵌套对象,但Mongoose模型里key是String类型,Mongoose试图将这个对象转为字符串时失败,抛出类型转换错误。 - 更新字段名不匹配:模型里存储地址的字段是
wallet_address,但你代码里用address来更新,不仅更新无效,还可能在文档里新增多余的address字段。
修复方案
- 修正查询条件,直接用字符串匹配
key字段 - 把更新的字段名改成模型里定义的
wallet_address - 可选:补充对
addressPassed的参数校验,避免传入空值
修复后的代码
exports.updateSingleAddress = (req, res) => { let keyPassed = req.body.key; let addressPassed = req.body.address; // 补充参数校验,避免空值更新 if (!keyPassed || !addressPassed) { return res.status(400).send({ message: "key和address参数不能为空" }); } // 修正查询条件:直接匹配String类型的key字段 const myquery = { key: keyPassed }; // 修正更新字段名,和模型保持一致 const newvalues = { $set: { wallet_address: addressPassed } }; Address.updateOne(myquery, newvalues) .then(data => { // 可以判断是否有文档被修改,返回更明确的信息 if (data.modifiedCount === 0) { return res.status(404).send({ message: "未找到匹配的key,更新失败" }); } res.send({ message: "地址更新成功", data }); }) .catch(err => { res.status(500).send({ message: err.message || "更新地址时发生错误" }); }); };
内容的提问来源于stack exchange,提问作者ChristianOConnor
相关产品推荐
相关产品推荐

