You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不修改C#类属性名的情况下将MongoDB存储键设为小写?

解决MongoDB存储文档键为小写的方案

问题原因

你当前使用的Newtonsoft.Json.JsonProperty特性仅适用于JSON.NET的序列化场景,而MongoDB官方驱动默认采用自身的Bson序列化机制,因此该特性不会对MongoDB的存储生效,导致文档键还是以C#属性名的首字母大写形式存储。

方法一:给属性添加MongoDB原生特性

直接在C#类的属性上使用MongoDB驱动提供的[BsonElement]特性,指定存储时的小写键名,无需修改属性名:

using MongoDB.Bson.Serialization.Attributes;

public class User
{
    [BsonRepresentation(BsonType.ObjectId)]
    [BsonElement("_id")]
    public string? Id { get; set; }

    [BsonElement("name")]
    public string Name { get; set; }

    [BsonElement("email")]
    public string Email { get; set; }
}

添加该特性后,MongoDB驱动会按照你指定的键名存储文档,完美匹配你期望的小写格式。

方法二:全局配置统一序列化规则

如果项目中有大量类需要统一使用小写键名,推荐全局配置序列化规则,自动将所有C#属性名转换为小写:

在初始化MongoDB客户端前,添加如下配置代码:

using MongoDB.Bson.Serialization;
using MongoDB.Bson.Serialization.Conventions;

// 创建自定义约定:将属性名转为全小写
var conventionPack = new ConventionPack
{
    new ElementNameConvention(elementName => elementName.ToLower())
};

// 注册全局约定,对所有类型生效
ConventionRegistry.Register("LowercaseElementNames", conventionPack, type => true);

// 初始化Mongo客户端
var client = new MongoClient("你的MongoDB连接字符串");

配置完成后,所有实体类的属性在存储到MongoDB时都会自动转为小写键名,无需逐个属性添加特性,适合大规模项目使用。

注意事项

  • 确保已安装MongoDB.Driver和MongoDB.Bson官方NuGet包,上述特性和配置均依赖于官方驱动。
  • 已存储的首字母大写文档不会自动更新,若需统一格式,需要手动修改或通过脚本批量更新。

内容的提问来源于stack exchange,提问作者Rishabh soni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 09:42:05