zoukankan      html  css  js  c++  java
  • mongo简单封装

     public class MongoDBSingleton
        {
            private static readonly MongoDBSingleton instance = new MongoDBSingleton();
    
            private MongoDatabase _db;
    
            private MongoDBSingleton() { _db = new MongoDB().GetDataBaseOne(); }
    
            /// <summary>
            /// 获取单实例
            /// </summary>
            public static MongoDBSingleton Instance
            {
                get
                {
                    return instance;
                }
            }
    
            /// <summary>
            /// ObjectId的键
            /// </summary>
            private readonly string OBJECTID_KEY = "_id";
    
           
    
    
            #region 插入数据
            /// <summary>
            /// 将数据插入进数据库
            /// </summary>
            /// <typeparam name="T">需要插入数据的类型</typeparam>
            /// <param name="t">需要插入的具体实体</param>
            public bool Insert<T>(T t)
            {
                //集合名称
                string collectionName = typeof(T).Name;
                return Insert<T>(t, collectionName);
            }
    
            /// <summary>
            /// 将数据插入进数据库
            /// </summary>
            /// <typeparam name="T">需要插入数据库的实体类型</typeparam>
            /// <param name="t">需要插入数据库的具体实体</param>
            /// <param name="collectionName">指定插入的集合</param>
            public bool Insert<T>(T t, string collectionName)
            {
                bool isPass = true;
    
                MongoCollection<BsonDocument> mc = this._db.GetCollection<BsonDocument>(collectionName);
    
                //将实体转换为json文档
                BsonDocument bd = t.ToBsonDocument();
                //进行插入操作
                WriteConcernResult result = mc.Insert(bd);
                if (!string.IsNullOrEmpty(result.ErrorMessage))
                {
                    isPass = false;
                    throw new Exception(result.ErrorMessage);
                }
                return isPass;
            }
    
            /// <summary>
            /// 批量插入数据
            /// </summary>
            /// <typeparam name="T">需要插入数据库的实体类型</typeparam>
            /// <param name="list">需要插入数据的列表</param>
            public bool Insert<T>(List<T> list)
            {
                //集合名称
                string collectionName = typeof(T).Name;
                return this.Insert<T>(list, collectionName);
            }
    
            /// <summary>
            /// 批量插入数据
            /// </summary>
            /// <typeparam name="T">需要插入数据库的实体类型</typeparam>
            /// <param name="list">需要插入数据的列表</param>
            /// <param name="collectionName">指定要插入的集合</param>
            public bool Insert<T>(List<T> list, string collectionName)
            {
                try
                {
                    MongoCollection<BsonDocument> mc = this._db.GetCollection<BsonDocument>(collectionName);
                    //创建一个空间json集合
                    List<BsonDocument> bsonList = new List<BsonDocument>();
                    //批量将数据转为json格式 并且放进json文档
                    list.ForEach(t => bsonList.Add(t.ToBsonDocument()));
                    //批量插入数据
                    mc.InsertBatch(bsonList);
                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                }
            }
            #endregion
    
            #region 查询数据
    
            #region 查询所有记录
            /// <summary>
            /// 查询一个集合中的所有数据
            /// </summary>
            /// <typeparam name="T">该集合数据的所属类型</typeparam>
            /// <param name="collectionName">指定集合的名称</param>
            /// <returns>返回一个List列表</returns>
            public List<T> FindAll<T>(string collectionName)
            {
                MongoCollection<T> mc = this._db.GetCollection<T>(collectionName);
                //以实体方式取出其数据集合
                MongoCursor<T> mongoCursor = mc.FindAll();
                //直接转化为List返回
                return mongoCursor.ToList<T>();
            }
    
            /// <summary>
            /// 查询一个集合中的所有数据 其集合的名称为T的名称
            /// </summary>
            /// <typeparam name="T">该集合数据的所属类型</typeparam>
            /// <returns>返回一个List列表</returns>
            public List<T> FindAll<T>()
            {
                string collectionName = typeof(T).Name;
                return FindAll<T>(collectionName);
            }
            #endregion
    
            #region 查询一条记录
            /// <summary>
            /// 查询一条记录
            /// </summary>
            /// <typeparam name="T">该数据所属的类型</typeparam>
            /// <param name="query">查询的条件 可以为空</param>
            /// <param name="collectionName">去指定查询的集合</param>
            /// <returns>返回一个实体类型</returns>
            public T FindOne<T>(IMongoQuery query, string collectionName)
            {
                MongoCollection<T> mc = this._db.GetCollection<T>(collectionName);
                query = this.InitQuery(query);
                T t = mc.FindOne(query);
                return t;
            }
    
            /// <summary>
            /// 查询一条记录
            /// </summary>
            /// <typeparam name="T">该数据所属的类型</typeparam>
            /// <param name="collectionName">去指定查询的集合</param>
            /// <returns>返回一个实体类型</returns>
            public T FindOne<T>(string collectionName)
            {
                return FindOne<T>(null, collectionName);
            }
    
            /// <summary>
            /// 查询一条记录
            /// </summary>
            /// <typeparam name="T">该数据所属的类型</typeparam>
            /// <returns>返回一个实体类型</returns>
            public T FindOne<T>()
            {
                string collectionName = typeof(T).Name;
                return FindOne<T>(null, collectionName);
            }
    
    
            /// <summary>
            /// 查询一条记录
            /// </summary>
            /// <typeparam name="T">该数据所属的类型</typeparam>
            /// <param name="query">查询的条件 可以为空</param>
            /// <returns>返回一个实体类型</returns>
            public T FindOne<T>(IMongoQuery query)
            {
                string collectionName = typeof(T).Name;
                return FindOne<T>(query, collectionName);
            }
            #endregion
    
            #region 普通的条件查询
            /// <summary>
            /// 根据指定条件查询集合中的数据
            /// </summary>
            /// <typeparam name="T">该集合数据的所属类型</typeparam>
            /// <param name="query">指定的查询条件 比如Query.And(Query.EQ("username","admin"),Query.EQ("password":"admin"))</param>
            /// <param name="collectionName">指定的集合的名称</param>
            /// <returns>返回一个List列表</returns>
            public List<T> Find<T>(IMongoQuery query, string collectionName)
            {
                MongoCollection<T> mc = this._db.GetCollection<T>(collectionName);
                query = this.InitQuery(query);
    
                MongoCursor<T> mongoCursor = mc.Find(query);
    
                return mongoCursor.ToList<T>();
            }
    
            /// <summary>
            /// 根据指定条件查询集合中的数据
            /// </summary>
            /// <typeparam name="T">该集合数据的所属类型</typeparam>
            /// <param name="query">指定的查询条件 比如Query.And(Query.EQ("username","admin"),Query.EQ("password":"admin"))</param>
            /// <param name="collectionName">指定的集合的名称</param>
            /// <returns>返回一个List列表</returns>
            public List<T> Find<T>(IMongoQuery query, SortByDocument sortBy, string collectionName)
            {
                MongoCollection<T> mc = this._db.GetCollection<T>(collectionName);
                query = this.InitQuery(query);
    
                MongoCursor<T> mongoCursor = mc.Find(query).SetSortOrder(sortBy);
    
                return mongoCursor.ToList<T>();
            }
    
    
            /// <summary>
            /// 根据指定条件查询集合中的数据记录数
            /// </summary>
            /// <typeparam name="T">该集合数据的所属类型</typeparam>
            /// <param name="query">指定的查询条件 比如Query.And(Query.EQ("username","admin"),Query.EQ("password":"admin"))</param>
            /// <param name="collectionName">指定的集合的名称</param>
            /// <returns>返回一个List列表</returns>
            public long FindCount<T>(IMongoQuery query, string collectionName)
            {
                MongoCollection<T> mc = this._db.GetCollection<T>(collectionName);
                query = this.InitQuery(query);
    
                MongoCursor<T> mongoCursor = mc.Find(query);
    
                return mongoCursor.Count();
            }
    
            /// <summary>
            /// 根据指定条件查询集合中的数据
            /// </summary>
            /// <typeparam name="T">该集合数据的所属类型</typeparam>
            /// <param name="query">指定的查询条件 比如Query.And(Query.EQ("username","admin"),Query.EQ("password":"admin"))</param>
            /// <returns>返回一个List列表</returns>
            public List<T> Find<T>(IMongoQuery query)
            {
                string collectionName = typeof(T).Name;
                return this.Find<T>(query);
            }
    
            /// <summary>
            /// 获取前N条数据
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="query"></param>
            /// <param name="top"></param>
            /// <param name="indexName"></param>
            /// <param name="collectionName"></param>
            /// <returns></returns>
            public List<T> Find<T>(IMongoQuery query, int top, string indexName, string collectionName)
            {
                MongoCollection<T> mc = this._db.GetCollection<T>(collectionName);
                MongoCursor<T> mongoCursor = mc.Find(query).SetLimit(top);
                return mongoCursor.ToList<T>();
            }
    
            /// <summary>
            /// 获取前N条数据
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="query"></param>
            /// <param name="top"></param>
            /// <param name="indexName"></param>
            /// <param name="collectionName"></param>
            /// <returns></returns>
            public List<T> Find<T>(IMongoQuery query, int top, string indexName, string collectionName, SortByDocument sortBy)
            {
                MongoCollection<T> mc = this._db.GetCollection<T>(collectionName);
                MongoCursor<T> mongoCursor = mc.Find(query).SetSortOrder(sortBy).SetLimit(top);
                return mongoCursor.ToList<T>();
            }
    
            #endregion
    
            #region 分页查询 PageIndex和PageSize模式  在页数PageIndex大的情况下 效率明显变低
    
            /// <summary>
            /// 分页查询 PageIndex和PageSize模式  在页数PageIndex大的情况下 效率明显变低
            /// </summary>
            /// <typeparam name="T">所需查询的数据的实体类型</typeparam>
            /// <param name="query">查询的条件</param>
            /// <param name="pageIndex">当前的页数</param>
            /// <param name="pageSize">当前的尺寸</param>
            /// <param name="sortBy">排序方式</param>
            /// <param name="collectionName">集合名称</param>
            /// <returns>返回List列表</returns>
            public List<T> Find<T>(IMongoQuery query, int pageIndex, int pageSize, SortByDocument sortBy, string collectionName)
            {
                MongoCollection<T> mc = this._db.GetCollection<T>(collectionName);
                MongoCursor<T> mongoCursor = null;
                query = this.InitQuery(query);
                sortBy = this.InitSortBy(sortBy);
    
                //如页序号为0时初始化为1
                pageIndex = pageIndex == 0 ? 1 : pageIndex;
                //按条件查询 排序 跳数 取数
                mongoCursor = mc.Find(query).SetSortOrder(sortBy).SetSkip((pageIndex - 1) * pageSize).SetLimit(pageSize);
    
                return mongoCursor.ToList<T>();
            }
            /// <summary>
            /// 分页查询 PageIndex和PageSize模式  在页数PageIndex大的情况下 效率明显变低
            /// </summary>
            /// <typeparam name="T">所需查询的数据的实体类型</typeparam>
            /// <param name="query">查询的条件</param>
            /// <param name="fd">指定查询的字段</param>
            /// <param name="pageIndex">当前的页数</param>
            /// <param name="pageSize">当前的尺寸</param>
            /// <param name="sortBy">排序方式</param>
            /// <param name="collectionName">集合名称</param>
            /// <returns>返回List列表</returns>
            public List<T> FindFields<T>(IMongoQuery query, FieldsDocument fd, int pageIndex, int pageSize, SortByDocument sortBy, string collectionName)
            {
                //try
                //{
                MongoCollection<T> mc = this._db.GetCollection<T>(collectionName);
                MongoCursor<T> mongoCursor = null;
                query = this.InitQuery(query);
                sortBy = this.InitSortBy(sortBy);
    
                //如页序号为0时初始化为1
                pageIndex = pageIndex == 0 ? 1 : pageIndex;
                //按条件查询 排序 跳数 取数
                mongoCursor = mc.Find(query).SetFields(fd).SetSortOrder(sortBy).SetSkip((pageIndex - 1) * pageSize).SetLimit(pageSize);
    
                return mongoCursor.ToList<T>();
                //}
                //catch (Exception ex)
                //{
                //    string ss;
                //    ss = ex.Message.ToString();
                //}
                //return null;
            }
    
            /// <summary>
            /// 分页查询 PageIndex和PageSize模式  在页数PageIndex大的情况下 效率明显变低
            /// </summary>
            /// <typeparam name="T">所需查询的数据的实体类型</typeparam>
            /// <param name="query">查询的条件</param>
            /// <param name="pageIndex">当前的页数</param>
            /// <param name="pageSize">当前的尺寸</param>
            /// <param name="sortBy">排序方式</param>
            /// <returns>返回List列表</returns>
            public List<T> Find<T>(IMongoQuery query, int pageIndex, int pageSize, SortByDocument sortBy)
            {
                string collectionName = typeof(T).Name;
                return this.Find<T>(query, pageIndex, pageSize, sortBy, collectionName);
            }
    
            #endregion
    
            #region 分页查询 指定索引最后项-PageSize模式
    
            /// <summary>
            /// 分页查询 指定索引最后项-PageSize模式 
            /// </summary>
            /// <typeparam name="T">所需查询的数据的实体类型</typeparam>
            /// <param name="query">查询的条件 没有可以为null</param>
            /// <param name="indexName">索引名称</param>
            /// <param name="lastKeyValue">最后索引的值</param>
            /// <param name="pageSize">分页的尺寸</param>
            /// <param name="sortType">排序类型 1升序 -1降序 仅仅针对该索引</param>
            /// <param name="collectionName">指定的集合名称</param>
            /// <returns>返回一个List列表数据</returns>
            public List<T> Find<T>(IMongoQuery query, string indexName, object lastKeyValue, int pageSize, int sortType, string collectionName)
            {
                MongoCollection<T> mc = this._db.GetCollection<T>(collectionName);
                MongoCursor<T> mongoCursor = null;
                query = this.InitQuery(query);
    
                //判断升降序后进行查询
                if (sortType > 0)
                {
                    //升序
                    if (lastKeyValue != null)
                    {
                        //有上一个主键的值传进来时才添加上一个主键的值的条件
                        query = Query.And(query, Query.GT(indexName, BsonValue.Create(lastKeyValue)));
                    }
                    //先按条件查询 再排序 再取数
                    mongoCursor = mc.Find(query).SetSortOrder(new SortByDocument(indexName, 1)).SetLimit(pageSize);
                }
                else
                {
                    //降序
                    if (lastKeyValue != null)
                    {
                        query = Query.And(query, Query.LT(indexName, BsonValue.Create(lastKeyValue)));
                    }
                    mongoCursor = mc.Find(query).SetSortOrder(new SortByDocument(indexName, -1)).SetLimit(pageSize);
                }
                return mongoCursor.ToList<T>();
            }
    
            /// <summary>
            /// 分页查询 指定索引最后项-PageSize模式 
            /// </summary>
            /// <typeparam name="T">所需查询的数据的实体类型</typeparam>
            /// <param name="query">查询的条件 没有可以为null</param>
            /// <param name="indexName">索引名称</param>
            /// <param name="lastKeyValue">最后索引的值</param>
            /// <param name="pageSize">分页的尺寸</param>
            /// <param name="sortType">排序类型 1升序 -1降序 仅仅针对该索引</param>
            /// <returns>返回一个List列表数据</returns>
            public List<T> Find<T>(IMongoQuery query, string indexName, object lastKeyValue, int pageSize, int sortType)
            {
                string collectionName = typeof(T).Name;
                return this.Find<T>(query, indexName, lastKeyValue, pageSize, sortType, collectionName);
            }
    
            /// <summary>
            /// 分页查询 指定ObjectId最后项-PageSize模式 
            /// </summary>
            /// <typeparam name="T">所需查询的数据的实体类型</typeparam>
            /// <param name="query">查询的条件 没有可以为null</param>
            /// <param name="lastObjectId">上一条记录的ObjectId 没有可以为空</param>
            /// <param name="pageSize">每页尺寸</param>
            /// <param name="sortType">排序类型 1升序 -1降序 仅仅针对_id</param>
            /// <param name="collectionName">指定去查询集合的名称</param>
            /// <returns>返回一个List列表数据</returns>
            public List<T> Find<T>(IMongoQuery query, string lastObjectId, int pageSize, int sortType, string collectionName)
            {
                return this.Find<T>(query, OBJECTID_KEY, new ObjectId(lastObjectId), pageSize, sortType, collectionName);
            }
    
            /// <summary>
            /// 分页查询 指定ObjectId最后项-PageSize模式 
            /// </summary>
            /// <typeparam name="T">所需查询的数据的实体类型</typeparam>
            /// <param name="query">查询的条件 没有可以为null</param>
            /// <param name="lastObjectId">上一条记录的ObjectId 没有可以为空</param>
            /// <param name="pageSize">每页尺寸</param>
            /// <param name="sortType">排序类型 1升序 -1降序 仅仅针对_id</param>
            /// <returns>返回一个List列表数据</returns>
            public List<T> Find<T>(IMongoQuery query, string lastObjectId, int pageSize, int sortType)
            {
                string collectionName = typeof(T).Name;
                return Find<T>(query, lastObjectId, pageSize, sortType, collectionName);
            }
    
            #endregion
    
    
            #endregion
    
            #region 更新数据
            /// <summary>
            /// 更新数据
            /// </summary>
            /// <typeparam name="T">更新的数据 所属的类型</typeparam>
            /// <param name="query">更新数据的查询</param>
            /// <param name="update">需要更新的文档</param>
            public bool Update<T>(IMongoQuery query, IMongoUpdate update)
            {
                string collectionName = typeof(T).Name;
                return this.Update<T>(query, update, collectionName);
            }
    
            /// <summary>
            /// 更新数据
            /// </summary>
            /// <typeparam name="T">更新的数据 所属的类型</typeparam>
            /// <param name="query">更新数据的查询</param>
            /// <param name="update">需要更新的文档</param>
            /// <param name="collectionName">指定更新集合的名称</param>
            public bool Update<T>(IMongoQuery query, IMongoUpdate update, string collectionName)
            {
                try
                {
                    MongoCollection<T> mc = this._db.GetCollection<T>(collectionName);
    
                    query = this.InitQuery(query);
                    //更新数据
                    WriteConcernResult result = mc.Update(query, update, UpdateFlags.None);
                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                }
            }
            #endregion
    
            #region 移除/删除数据
            /// <summary>
            /// 移除指定的数据
            /// </summary>
            /// <typeparam name="T">移除的数据类型</typeparam>
            /// <param name="query">移除的数据条件</param>
            /// <param name="collectionName">指定的集合名词</param>
            public bool Remove<T>(IMongoQuery query, string collectionName)
            {
                try
                {
                    MongoCollection<T> mc = this._db.GetCollection<T>(collectionName);
    
                    query = this.InitQuery(query);
                    //根据指定查询移除数据
                    mc.Remove(query);
                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                }
            }
    
            /// <summary>
            /// 移除指定的数据
            /// </summary>
            /// <typeparam name="T">移除的数据类型</typeparam>
            /// <param name="query">移除的数据条件</param>
            public void Remove<T>(IMongoQuery query)
            {
                string collectionName = typeof(T).Name;
                this.Remove<T>(query, collectionName);
            }
    
            /// <summary>
            /// 移除实体里面所有的数据
            /// </summary>
            /// <typeparam name="T">移除的数据类型</typeparam>
            public void ReomveAll<T>()
            {
                string collectionName = typeof(T).Name;
                this.Remove<T>(null);
            }
    
            /// <summary>
            /// 移除实体里面所有的数据
            /// </summary>
            /// <typeparam name="T">移除的数据类型</typeparam>
            /// <param name="collectionName">指定的集合名称</param>
            public void RemoveAll<T>(string collectionName)
            {
                this.Remove<T>(null);
            }
            #endregion
    
            #region 创建索引
            /// <summary>
            /// 创建索引 
            /// </summary>
            /// <typeparam name="T">需要创建索引的实体类型</typeparam>
            public void CreateIndex<T>()
            {
                string collectionName = typeof(T).Name;
                MongoCollection<BsonDocument> mc = this._db.GetCollection<BsonDocument>(collectionName);
    
                PropertyInfo[] propertys = typeof(T).GetProperties(BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty);
                //得到该实体类型的属性
                foreach (PropertyInfo property in propertys)
                {
                    //在各个属性中得到其特性
                    foreach (object obj in property.GetCustomAttributes(true))
                    {
                        MongoDBFieldAttribute mongoField = obj as MongoDBFieldAttribute;
                        if (mongoField != null)
                        {// 此特性为mongodb的字段属性
    
                            IndexKeysBuilder indexKey;
                            if (mongoField.Ascending)
                            {
                                //升序 索引
                                indexKey = IndexKeys.Ascending(property.Name);
                            }
                            else
                            {
                                //降序索引
                                indexKey = IndexKeys.Ascending(property.Name);
                            }
                            //创建该属性
                            mc.CreateIndex(indexKey, IndexOptions.SetUnique(mongoField.Unique));
                        }
                    }
                }
            }
            #endregion
    
            #region 获取集合的存储大小
            /// <summary>
            /// 获取集合的存储大小
            /// </summary>
            /// <typeparam name="T">该集合对应的实体类</typeparam>
            /// <returns>返回一个long型</returns>
            public long GetDataSize<T>()
            {
                string collectionName = typeof(T).Name;
                return GetDataSize(collectionName);
            }
    
            /// <summary>
            /// 获取集合的存储大小
            /// </summary>
            /// <param name="collectionName">该集合对应的名称</param>
            /// <returns>返回一个long型</returns>
            public long GetDataSize(string collectionName)
            {
    
                MongoCollection<BsonDocument> mc = this._db.GetCollection<BsonDocument>(collectionName);
                return mc.GetTotalStorageSize();
            }
    
    
            #endregion
    
            #region 私有的一些辅助方法
            /// <summary>
            /// 初始化查询记录 主要当该查询条件为空时 会附加一个恒真的查询条件,防止空查询报错
            /// </summary>
            /// <param name="query">查询的条件</param>
            /// <returns></returns>
            private IMongoQuery InitQuery(IMongoQuery query)
            {
                if (query == null)
                {
                    //当查询为空时 附加恒真的条件 类似SQL:1=1的语法
                    query = Query.Exists(OBJECTID_KEY);
                }
                return query;
            }
    
            /// <summary>
            /// 初始化排序条件  主要当条件为空时 会默认以ObjectId递增的一个排序
            /// </summary>
            /// <param name="sortBy"></param>
            /// <returns></returns>
            private SortByDocument InitSortBy(SortByDocument sortBy)
            {
                if (sortBy == null)
                {
                    //默认ObjectId 递增
                    sortBy = new SortByDocument(OBJECTID_KEY, -1);
                }
                return sortBy;
            }
            #endregion
    
            #region 通过mongoGridS保存文件
            /// <summary>
            /// 通过mongoGridS保存文件
            /// </summary>
            /// <param name="FileData">文件二进制流</param>
            /// <param name="FileName">文件名称</param>
            public bool SaveFilesByGridFS(byte[] FileData, string FileName, BsonDocument doc, string FilesType)
            {
                bool flag = false;
                try
                {
                    MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = FilesType };
                    MongoGridFS fs = new MongoGridFS(_db, fsSetting);
    
                    //通过Metadata 添加附加信息
                    MongoGridFSCreateOptions option = new MongoGridFSCreateOptions();
                    option.UploadDate = DateTime.Now;
    
                    //BsonDocument doc = new BsonDocument();
                    //doc.Add("UserID", 1L);
                    //doc.Add("GUID", System.Guid.NewGuid());
                    option.Metadata = doc;
    
                    //创建文件,文件并存储数据
                    using (MongoGridFSStream gfs = fs.Create(FileName, option))
                    {
                        gfs.Write(FileData, 0, FileData.Length);
                        gfs.Close();
                    }
                    flag = true;
                }
                catch (Exception e)
                {
                    flag = false;
    
                }
                return flag;
    
            }
            #endregion
    
            #region 通过mongoGridS得到图片
            /// <summary>
            /// 通过mongoGridS得到图片
            /// </summary>
            /// <param name="FileData">文件二进制流</param>
            /// <param name="FileName">文件名称</param>
            public byte[] GetFileByGridFS(string ResGuid, string FilesType)
            {
                byte[] bytes;
                try
                {
                    MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = FilesType };
                    MongoGridFS gridfs = new MongoGridFS(_db, fsSetting);
                    // 定义查询条件
                    var query = new QueryDocument();
                    var b = new BsonDocument();
                    b.Add("metadata.GUID", ResGuid);
                    query.Add(b);
                    //得到文件信息
                    MongoGridFSFileInfo VideoInfo = gridfs.FindOne(query);
                    if (VideoInfo != null)
                    {
                        //读取
                        using (MongoGridFSStream gridFileStream = VideoInfo.OpenRead())
                        {
                            //数组大小
                            bytes = new byte[gridFileStream.Length];
                            //存入二进制
                            gridFileStream.Read(bytes, 0, (int)gridFileStream.Length);
    
                            //   gridfs.Download(_Stream, query, 1);
    
                        }
                    }
                    else
                    {
                        bytes = null;
                    }
    
                }
                catch (Exception e)
                {
                    bytes = null;
                }
    
                return bytes;
    
            }
            #endregion
    
            #region 通过ResGuid,删除图片
            /// <summary>
            /// 通过ResGuid,删除图片
            /// </summary>
            /// <param name="FileData">文件二进制流</param>
            /// <param name="FileName">文件名称</param>
            public bool DelFileByGridFS(string ResGuid, string FilesType)
            {
                bool flag = false;
                try
                {
                    MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = FilesType };
                    MongoGridFS gridfs = new MongoGridFS(_db, fsSetting);
                    // 定义查询条件
                    var query = new QueryDocument();
                    var b = new BsonDocument();
                    b.Add("metadata.GUID", ResGuid);
                    query.Add(b);
                    //得到文件信息
                    MongoGridFSFileInfo ExistImage = gridfs.FindOne(query);
                    if (ExistImage != null)
                    {
                        ExistImage.Delete();
    
                        flag = true;
                    }
                    else
                    {
                        flag = false;
                    }
    
                }
                catch (Exception e)
                {
                    flag = false;
                }
    
                return flag;
    
            }
            #endregion
        }
     public MongoDatabase GetDataBaseOne()
            {
                MongoClientSettings mongoSetting = new MongoClientSettings();
                //设置连接超时时间
                mongoSetting.ConnectTimeout = new TimeSpan(CONNECT_TIME_OUT * TimeSpan.TicksPerSecond);
                mongoSetting.MaxConnectionLifeTime = new TimeSpan(CONNECT_LIFE_TIME * TimeSpan.TicksPerSecond);
    
                //设定最大连接池
                mongoSetting.MinConnectionPoolSize = 10;
                //等待列队数量
                mongoSetting.WaitQueueSize = 50;
    
                //设置数据库服务器
                mongoSetting.Server = new MongoServerAddress(MONGO_CONN_HOST1, MONGO_CONN_PORT1);
    
                //创建Mongo的客户端
                MongoClient client = new MongoClient(mongoSetting);
                //设置用户名和密码
                MongoCredentials mc = new MongoCredentials(ConfigConstant.MUSER1, ConfigConstant.MPWD1);
                MongoConnectionStringBuilder mcsb = new MongoConnectionStringBuilder();
                MongoServer ms = client.GetServer();
                ms.Connect();
                //得到服务器端并且生成数据库实例
                return ms.GetDatabase(DB_NAME1, mc);
            }
  • 相关阅读:
    from import 的认识
    模块初识
    eq方法
    hash介绍
    item系列
    析构函数
    serializers进阶
    APIView源码解析
    RPC协议
    面试题补充
  • 原文地址:https://www.cnblogs.com/tgdjw/p/8760622.html
Copyright © 2011-2022 走看看