Mongodb c# 基础操作

文章介绍了如何在Furion框架中集成和操作MongoDB,包括实体数据的注意事项,如Decimal转String,DateTime的处理,以及Enum的存储。提供了基本的增、删、改、查接口示例,同时也讨论了[BsonIgnoreExtraElements]和[BsonDateTimeOptions]等特性在序列化和反序列化中的作用。
摘要由CSDN通过智能技术生成

1.环境

        使用的furion的包,配置这个就可以使用了,

10.3 MongoDB 操作 | Furion

算了,基础的集成不写了,还是看furion的文档吧,

2.数据

        实体数据  有几个注意点

        1.mongodb没有decimal类型,默认转string ,加上那个Attribute就没问题了,

        2.一个是枚举存进去是int32类型 ,

        3.添加一条数据就可以看出数据库中存的数据比实际数据少8个小时

        4.

[BsonIgnoreExtraElements(Inherited = true)]
    public class BaseEntity : IMongoDBEntity<long>
    {
        /// <summary>
        /// 主键Id
        /// </summary>

        public virtual long Id { get; set; } 

        /// <summary>
        /// 创建时间
        /// </summary>
        [BsonDateTimeOptions(Kind = DateTimeKind.Local)]
        public virtual DateTime? CreatedTime { get; set; } = DateTime.Now;
    }
public class Test : BaseEntity
    {
        [BsonRepresentation(BsonType.Double)]
        public decimal Num { get; set; }

        public DateTime? TestTime { get; set; } = DateTime.Now;

        public List<EmbeddedDocument> embeddedDocuments { get; set; }

        public string Name { get; set; }


    }

    public class EmbeddedDocument : BaseEntity
    {
        public EmbeddedEnum EmbeddedEnumType { get; set; }

        public string Key { get; set; }

        public string Value { get; set; }
    }
    public enum EmbeddedEnum
    {
        [Description("a")]
        A = 1,
        [Description("b")]
        B
    }

        增

 [Route("/Test")]
    [ApiDescriptionSettings("Test", Name = "测试", Order = 100)]
    public class TestService : IDynamicApiController, ITransient
    {

        private readonly IMongoDBRepository<Test, long> _testMongoRepository;
        public TestService(IMongoDBRepository<Test, long> testMongoRepository)
        {
            _testMongoRepository = testMongoRepository;
        }


        [HttpPost("add")]
        public async Task Add()
        {
            var test = new Test { Num = 22.22M, Name = "111" };
            var emDocuments= new List<EmbeddedDocument>();
            var emDocument1 = new EmbeddedDocument
            {
                Key = "key1",
                Value = "value1",
                EmbeddedEnumType = EmbeddedEnum.A,

            };
            var emDocument2 = new EmbeddedDocument
            {
                Key = "key2",
                Value = "value2",
                EmbeddedEnumType = EmbeddedEnum.B,

            };

            emDocuments.Add(emDocument1);
            emDocuments.Add(emDocument2);
            test.embeddedDocuments = emDocuments;

            await _testMongoRepository.InsertAsync(test);
        }
        

    }

 

 

        删 (根据id删除)

[HttpPost("delete")]
        public async Task Delete()
        {
            long id = 200453425136140358L;
            await _testMongoRepository.DeleteAsync(id);
        }

         改

  /// <summary>
        /// 修改
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("update")]
        public async Task Update(Test test)
        {
            await _testMongoRepository.UpdateAsync(test);
        }

 

        查

/// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("list")]
        public async Task<List<Test>> List()
        {
            return await _testMongoRepository.Entities.Find(a => a.Name == "111").SortByDescending(a => a.CreatedTime).ToListAsync();
        }


        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpGet("page")]
        public async Task<MongoDBPagedList<Test>> Page()
        {
            var page = 1;
            var pageSize = 10;
            return await _testMongoRepository.Entities.Find(a => a.Name == "111").SortByDescending(a => a.CreatedTime).ToPagedListAsync(page, pageSize);
        }

3.其他补充

       [BsonIgnoreExtraElements(Inherited = true)] 在 MongoDB 中,如果一个文档包含了不在映射类中定义的字段,MongoDB 驱动程序默认会抛出 MongoDB.Bson.BsonSerializationException 异常。这个异常的含义是文档中包含了额外的未知字段,而映射类并没有定义这些字段。

[BsonDateTimeOptions(Kind = DateTimeKind.Local)]Kind属性用于指定DateTime值的时间种类,可以是本地时间(DateTimeKind.Local)、协调世界时(DateTimeKind.Utc)或未指定(DateTimeKind.Unspecified)。本地时间是指相对于计算机所在的时区的时间,协调世界时是指相对于全球的统一时间标准的时间。在Bson文档中,DateTime类型被存储为UTC时间。在将DateTime类型序列化为BsonDocument时,如果不指定Kind属性,则默认为本地时间。在反序列化BsonDocument为实体类对象时,如果属性上使用了[BsonDateTimeOptions],则会按照Kind属性的指定进行转换。

[BsonRepresentation(BsonType.Double)]  类型装换为double.,还可以转换其他的类型.

        没有试过不是数字类型的字符串能不能转进去

4.结

        最基本的一套增删改查就结束了,有时间来补嵌套文档的增删改查      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值