如何在C# .Net中用InsertOneAsync插入MongoDB文档并返回文档或ID
解决MongoDB泛型插入方法返回实体或自动生成ID的问题
这问题我熟!其实MongoDB的InsertOneAsync虽然返回Task(无返回值),但它会自动把生成的ID赋值给你传入的实体对象,所以你只需要稍微调整下方法就能返回带ID的实体了:
public async Task<T> Create(T entity) { await Collection.InsertOneAsync(entity); // 插入完成后,entity的Id字段已被MongoDB自动填充 return entity; }
关键原理说明
- 只要你的实体类满足以下条件之一,MongoDB就会自动生成并赋值ID:
- 拥有名为
Id的公共属性,且插入前值为ObjectId.Empty(默认的ObjectId类型ID) - 用
[BsonId]特性标注了自定义名称的ID属性,且插入前值为对应类型的默认值(比如Guid.Empty)
- 拥有名为
- 插入操作完成后,你传入的
entity对象已经包含了MongoDB生成的唯一ID,直接返回它就能拿到想要的结果。
自定义ID类型的额外说明
如果你的实体使用的不是ObjectId类型的ID(比如Guid),可以通过特性配置让MongoDB自动生成:
public class SampleEntity { [BsonId] [BsonRepresentation(BsonType.String)] [BsonIdGenerator(typeof(GuidGenerator))] // 让MongoDB服务器端生成Guid public Guid Id { get; set; } }
内容的提问来源于stack exchange,提问作者Aravind
相关产品推荐
相关产品推荐

