C# MongoDbDriver调用Unset方法无法删除数据库字段问题求助
排查要点
- 字段路径映射问题
强类型Unset表达式解析出的Bson字段路径和数据库实际存储不一致是最常见的原因。如果项目配置了驼峰命名规则、或者对应属性加了[BsonElement]自定义字段名,person => person.Address.PostalCode解析出的路径和实际存储的字段名不匹配,就会导致操作不生效。
可以先改用硬编码字段路径验证:// 这里填数据库里实际存储的字段路径,比如配置了驼峰就是"address.postalCode" var update = Builders<Person>.Update.Unset("Address.PostalCode"); - 更新执行结果校验
打印UpdateOne返回的UpdateResult对象的两个属性:MatchedCount:过滤条件匹配到的文档数,如果为0说明personId对应文档不存在,更新根本没执行ModifiedCount:实际修改的文档数,如果匹配到文档但该值为0,说明目标文档里不存在你要删除的字段路径
- 事务未提交
如果这段逻辑在MongoDB事务上下文中,忘记提交事务的话,所有修改都会被回滚,不会实际写入数据库。 - 后续操作回写字段
检查Unset执行后有没有其他逻辑,用携带Address.PostalCode值的Person实体对同一文档做了写入操作,会把已经删除的字段重新写回库中。
内容的提问来源于stack exchange,提问作者panzer
相关产品推荐
相关产品推荐

