zoukankan      html  css  js  c++  java
  • Mongodb for .Net Core 驱动的应用

    一:我在做.net core 应用mongodb的sdk时,查阅了不少资料,故记录下来,以方便查阅。mongodb类库的版本 mongodb driver 2.4.3,一下方法均来自此版本文件

    先看看类库的中的几个方法
    public static IFindFluent<TDocument, TDocument> Find<TDocument>(this IMongoCollection<TDocument> collection, FilterDefinition<TDocument> filter, FindOptions options = null); public static UpdateResult UpdateMany<TDocument>(this IMongoCollection<TDocument> collection, Expression<Func<TDocument, bool>> filter,
    UpdateDefinition<TDocument> update, UpdateOptions options = null, CancellationToken cancellationToken = default(CancellationToken));

    我们看到几个重要的类 UpdateDefinition,FilterDefinition这些是什么,怎么使用?别急看看下面个这个类,就有头绪了

    二:Builders

      //
        // 摘要:
        //     A static helper class containing various builders.
        //
        // 类型参数:
        //   TDocument:
        //     The type of the document.
        public static class Builders<TDocument>
        {
            //
            // 摘要:
            //     Gets a MongoDB.Driver.FilterDefinitionBuilder`1.
            public static FilterDefinitionBuilder<TDocument> Filter { get; }
            //
            // 摘要:
            //     Gets an MongoDB.Driver.IndexKeysDefinitionBuilder`1.
            public static IndexKeysDefinitionBuilder<TDocument> IndexKeys { get; }
            //
            // 摘要:
            //     Gets a MongoDB.Driver.ProjectionDefinitionBuilder`1.
            public static ProjectionDefinitionBuilder<TDocument> Projection { get; }
            //
            // 摘要:
            //     Gets a MongoDB.Driver.SortDefinitionBuilder`1.
            public static SortDefinitionBuilder<TDocument> Sort { get; }
            //
            // 摘要:
            //     Gets an MongoDB.Driver.UpdateDefinitionBuilder`1.
            public static UpdateDefinitionBuilder<TDocument> Update { get; }
        }

    三:进入UpdateDefinitionBuilder,SortDefinitionBuilder,ProjectionDefinitionBuilder,IndexKeysDefinitionBuilder,FilterDefinitionBuilder这5个类中可以看到,里面包含了各种方法

                FilterDefinitionBuilder这个一般用作查询条件
                var time = DateTime.Now;
                var list = new List<FilterDefinition<PhoneEntity>>();
                list.Add(Builders<PhoneEntity>.Filter.Lt("AddTime", time.AddDays(400)));
                list.Add(Builders<PhoneEntity>.Filter.Gt("AddTime", time));
                FilterDefinition<PhoneEntity> filter = Builders<PhoneEntity>.Filter.And(list);
                Builders<PhoneEntity>.Filter. 后面包含各种方法,来对查询的条件进行组合
                 UpdateDefinitionBuilder这个一般用作要修改里
                    //要修改的字段
                    var list = new List<UpdateDefinition<T>>();
                    foreach (var item in t.GetType().GetProperties())
                    {
                        if (item.Name.ToLower() == "id") continue;
                        list.Add(Builders<T>.Update.Set(item.Name, item.GetValue(t)));
                    }
                    var updatefilter = Builders<T>.Update.Combine(list);
                    Builders<PhoneEntity>.Update. 后面包含各种方法,来对修改的条件进行组合

    剩下的3个方法也一样

    四:异步方法的使用

    当只有查询条件,没有其他附加条件如排序,制定查询字段时,这2个方法查询出来的结果是一样的
    return client.FindAsync(filter).Result.FirstOrDefault(); 
    return await
    client.Find(filter).FirstOrDefaultAsync();

    当带有其他附加条件时,上面的第一个方法就不可以使用了,必须要要使用第二个方法才行

    return await client.Find(filter).Sort(sort).Project<T>(projection).Skip((pageIndex - 1) * pageSize).Limit(pageSize).ToListAsync();

  • 相关阅读:
    c3p0、dbcp、proxool、BoneCP比较
    velocity的一些优化记录
    JUnit-4.11使用报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing错误
    Deployment failure on Tomcat 7.x. Could not copy all resources to
    Spring3.2.3+Quartz2.2.1 整合配置
    mysql批量insert速度超慢
    Fine Uploader + Spring3.2.2(Java+html5上传) SpringMVC+jquery-fineuploader 文件上传
    实现工资的按天统计(X:日期 Y:姓名)
    Java发邮件带附件(且重命名附件)
    微信小程序wx.switchTab传参问题
  • 原文地址:https://www.cnblogs.com/xiaoyaodijun/p/6862277.html
Copyright © 2011-2022 走看看