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

如何强制MongoDB使用UUID替代ObjectId作为自动生成的_id

实现方法

MongoDB C#驱动默认给无_id字段的BsonDocument自动生成ObjectId类型主键,你不需要修改现有纯JSON存取的逻辑,只要替换默认的Id生成器即可实现自动生成UUID类型_id,全程不需要额外加序列化/反序列化处理。

配置步骤

  1. 程序启动阶段执行一次Id生成器注册,替换BsonDocument默认的ObjectId生成规则:
// 仅需执行一次,全局生效
BsonSerializer.RegisterIdGenerator(
    typeof(BsonDocument),
    new GuidGenerator(GuidRepresentation.Standard)
);

这里指定GuidRepresentation.Standard是为了使用跨语言兼容的标准UUID格式,避免不同语言驱动读取时出现UUID编码错乱问题,不要使用过时的全局BsonDefaults.GuidRepresentation配置。

  1. 你的原有数据操作逻辑不需要做任何改动,直接执行即可:
var testColl = db.GetCollection<BsonDocument>("test");
var testJson = "[{'name':'Data1'},{'name':'Data2'}]";
testColl.InsertMany(BsonSerializer.Deserialize<BsonDocument[]>(testJson));

效果验证

插入完成后查询返回的文档结构如下,_id已经是UUID类型,不再是默认的ObjectId:

[
  { "_id" : UUID("3fa85f64-5717-4562-b3fc-2c963f66afa6"), "name" : "Data1" },
  { "_id" : UUID("7d9b32f1-8c4a-4e7d-9f1a-2b6c8d3e7f9a"), "name" : "Data2" }
]

补充说明

  • 注册代码要放在所有MongoDB业务操作之前执行,且仅执行一次,避免重复注册抛出异常
  • 该配置仅对泛型参数为BsonDocument的集合生效,不会影响你项目中其他强类型实体类的MongoDB集合主键生成规则
  • 如果你只想让某一个特定集合使用UUID主键,不想全局影响所有BsonDocument集合,可以自定义一个空类继承BsonDocument,单独给这个派生类注册GuidGenerator,获取集合时使用该派生类作为泛型参数即可
  • 整个流程不需要你手动给传入的JSON添加_id字段,也不需要编写额外的字段转换逻辑,完全符合纯JSON直接存取的要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:09:39