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);
        }

 

posted @ 2018-04-09 16:05  nbu_djw  阅读(356)  评论(0编辑  收藏  举报