如何配置C# MongoDB Driver查询的字段命名大小写
解决MongoDB查询过滤器字段大小写问题
你遇到的是MongoDB .NET驱动默认的字段命名转换问题——驱动会自动把C#里的PascalCase(首字母大写)属性转成MongoDB的camelCase(首字母小写)字段名。要让查询生成UserId而不是userId,有两种常用方法:
方法一:给单个属性指定字段名
在UserWebHook类的UserId属性上添加[BsonElement]特性,显式指定MongoDB中的字段名和属性名一致:
using MongoDB.Bson.Serialization.Attributes; public class UserWebHook { [BsonElement("UserId")] public string UserId { get; set; } // 其他属性... }
这样驱动在生成查询过滤器时,就会使用你指定的UserId作为字段名。
方法二:全局配置序列化规则
如果希望所有实体类的属性都保留原大小写(不自动转驼峰),可以在程序启动阶段配置MongoDB的序列化约定:
using MongoDB.Bson.Serialization; using MongoDB.Bson.Serialization.Conventions; // 示例:在Program.cs或Startup.cs中添加 var conventionPack = new ConventionPack(); // 使用默认元素命名约定,直接以C#属性名作为MongoDB字段名 conventionPack.Add(new DefaultElementNameConvention()); // 注册全局约定,对所有实体生效 ConventionRegistry.Register("KeepOriginalCase", conventionPack, t => true);
配置完成后,所有基于该驱动的查询都会保留属性的原大小写来生成MongoDB字段名。
注意:如果数据库中已有驼峰命名的历史数据,全局修改规则可能导致查询不匹配,建议根据实际数据情况选择合适的方案。
内容的提问来源于stack exchange,提问作者Sergio Jr
相关产品推荐
相关产品推荐

