MongoDB更新抛出Invalid BSON field name错误,求排查及API指导
问题排查与修正方案
你的代码抛出Invalid BSON field name name异常的核心原因是没有正确使用MongoDB的更新操作符来包装更新内容,而且代码里明明已经创建了包含$set操作符的文档,却在调用API时传错了参数。
错误原因拆解
MongoDB的updateOne方法的第二个参数必须是包含更新操作符(比如$set、$inc)的文档,用来明确告诉数据库要执行的更新类型。你现在直接把{"name":"0.4"}传给了updateOne,MongoDB会把这个文档当成更新指令来解析,但name并不是MongoDB认可的更新操作符,因此触发了非法字段名的异常。
更尴尬的是,你已经写了正确创建$set包装文档的代码:
BasicDBObject setData = new BasicDBObject(); setData.append("$set",updateData);
但最后调用updateOne时却传了updateData而非setData,等于白写了这部分正确代码。
修正后的代码
把updateOne的第二个参数换成你已经创建好的setData即可:
BasicDBObject searchQuery = new BasicDBObject(); searchQuery.append("_id", new ObjectId("133443acb")); BasicDBObject updateData = new BasicDBObject(); updateData.append("name", "0.4"); BasicDBObject setData = new BasicDBObject("$set", updateData); // 这里要传setData而不是updateData collection.updateOne(searchQuery, setData);
额外说明
- 使用
$set操作符只会更新文档中指定的name字段,不会替换整个文档,这也是你想要的局部更新效果。 - 确认你的
_id值"133443acb"是有效的ObjectId格式(虽然当前错误和这个无关,但如果_id不存在,updateOne不会报错,只是不会执行任何更新操作)。
内容的提问来源于stack exchange,提问作者Saravanakumar Murugesan
相关产品推荐
相关产品推荐

