首页 > 技术文章 > MangoDB的C#Driver驱动简单例子

lgxlsm 2016-01-22 17:49 原文

以下是本人学习C#Driver驱动简单的学习例子。GridFS的增删查操作 和 表的增删查改操作。

 

    public class MongoServerHelper
    {
        public static string dataBase = "File";
        public static string fsName = "fs";

        private static string _IP = "192.168.1.60";
        private static int _port = 27017;

        public MongoServer GetMongoServer()
        {
            MongoServerSettings Settings = new MongoServerSettings();
            Settings.Server = new MongoServerAddress(_IP, _port);
            //最大连接池
            Settings.MaxConnectionPoolSize = 500;
            //最大闲置时间
            Settings.MaxConnectionIdleTime = TimeSpan.FromSeconds(30);
            //链接时间
            Settings.ConnectTimeout = TimeSpan.FromSeconds(10);
            //等待队列大小
            Settings.WaitQueueSize = 50;
            //socket超时时间
            Settings.SocketTimeout = TimeSpan.FromSeconds(10);
            //队列等待时间
            Settings.WaitQueueTimeout = TimeSpan.FromSeconds(60);
            //操作时间
            Settings.OperationTimeout = TimeSpan.FromSeconds(60); 
            MongoServer server = new MongoServer(Settings);
            return server;
        }
    }

 

    public class BaseDAL
    {
        public MongoServerHelper mongoServerHelper = new MongoServerHelper();
        private MongoServer server = null;

        public BaseDAL()
        {
            server = mongoServerHelper.GetMongoServer();
        }

        /// <summary>  
        /// 新增  
        /// </summary>   
        public Boolean Insert(String collectionName, BsonDocument document)
        {
            server.Connect();
            MongoDatabase database = server.GetDatabase(MongoServerHelper.dataBase);
            MongoCollection<BsonDocument> collection = database.GetCollection<BsonDocument>(collectionName);
            try
            {
                collection.Insert(document);
                server.Disconnect();
                return true;
            }
            catch
            {
                server.Disconnect();
                return false;
            }
        }

        /// <summary>  
        /// 新增  
        /// </summary>   
        public Boolean Insert<T>(String collectionName, T t)
        {
            server.Connect();
            MongoDatabase database = server.GetDatabase(MongoServerHelper.dataBase);
            var collection = database.GetCollection<T>(collectionName);
            try
            {
                collection.Insert(t);
                server.Disconnect();
                return true;
            }
            catch
            {
                server.Disconnect();
                return false;
            }
        }

        /// <summary>  
        /// 批量新增  
        /// </summary>
        public IEnumerable<WriteConcernResult> Insert<T>(String collectionName, List<T> list)
        {
            server.Connect();
            MongoDatabase database = server.GetDatabase(MongoServerHelper.dataBase);
            var collection = database.GetCollection<T>(collectionName);
            try
            {
                IEnumerable<WriteConcernResult> result = collection.InsertBatch(list);
                server.Disconnect();
                return result;
            }
            catch
            {
                server.Disconnect();
                return null;
            }
        }

        /// <summary>  
        /// 修改  
        /// </summary>    
        public WriteConcernResult Update(String collectionName, IMongoQuery query, QueryDocument update)
        {
            server.Connect();
            MongoDatabase database = server.GetDatabase(MongoServerHelper.dataBase);
            MongoCollection<BsonDocument> collection = database.GetCollection<BsonDocument>(collectionName);
            try
            {
                var new_doc = new UpdateDocument() { { "$set", update } };
                //UpdateFlags设置为Multi时,可批量修改
                var result = collection.Update(query, new_doc, UpdateFlags.Multi);
                server.Disconnect();
                return result;
            }
            catch
            {
                return null;
            }
        }

        /// <summary>  
        /// 移除匹配的集合
        /// </summary>  
        public Boolean Remove(String collectionName, IMongoQuery query)
        {
            server.Connect();
            MongoDatabase database = server.GetDatabase(MongoServerHelper.dataBase);
            MongoCollection<BsonDocument> collection = database.GetCollection<BsonDocument>(collectionName);
            try
            {
                collection.Remove(query);
                server.Disconnect();
                return true;
            }
            catch
            {
                server.Disconnect();
                return false;
            }
        }

        /// <summary>
        /// 分页查询
        /// </summary>       
        public List<T> GetPageList<T>(String collectionName, IMongoQuery query, string sort, bool isDesc, int index, int pageSize, out long rows)
        {
            server.Connect();
            MongoDatabase database = server.GetDatabase(MongoServerHelper.dataBase);
            MongoCollection<BsonDocument> collection = database.GetCollection<BsonDocument>(collectionName);
            List<T> list;
            try
            {
                rows = collection.FindAs<T>(query).Count();
                if (isDesc)
                {
                    list = collection.FindAs<T>(query).SetSortOrder(SortBy.Descending(sort)).SetSkip(index).SetLimit(pageSize).ToList();
                }
                else
                {
                    list = collection.FindAs<T>(query).SetSortOrder(SortBy.Ascending(sort)).SetSkip(index).SetLimit(pageSize).ToList();
                }
                server.Disconnect();
                return list;

            }
            catch
            {
                rows = 0;
                server.Disconnect();
                return null;
            }
        }

        /// <summary>
        /// 查询对象集合
        /// </summary>
        public List<T> GetList<T>(String collectionName, IMongoQuery query, string[] sort, bool isDesc)
        {
            server.Connect();
            MongoDatabase database = server.GetDatabase(MongoServerHelper.dataBase);
            MongoCollection<BsonDocument> collection = database.GetCollection<BsonDocument>(collectionName);
            List<T> list;
            try
            {
                if (isDesc)
                {
                    list= collection.FindAs<T>(query).SetSortOrder(SortBy.Descending(sort)).ToList();
                    server.Disconnect();
                    return list;
                }
                else
                {
                    list =collection.FindAs<T>(query).SetSortOrder(SortBy.Ascending(sort)).ToList();
                    server.Disconnect();
                    return list;
                }
            }
            catch
            {
                return null;
            }
        }

        /// <summary>
        /// 总数
        /// </summary>    
        public long Count(string collectionName, IMongoQuery query)
        {
            server.Connect();
            MongoDatabase database = server.GetDatabase(MongoServerHelper.dataBase);
            MongoCollection<BsonDocument> collection = database.GetCollection<BsonDocument>(collectionName);
            try
            {
                server.Disconnect();
                return collection.Count(query);
            }
            catch
            {
                server.Disconnect();
                return 0;
            }
        }
    }

 

    public class BaseEntity
    {
        /// <summary>
        /// 基类对象的ID,MongoDB要求每个实体类必须有的主键
        /// </summary>
        [BsonRepresentation(BsonType.ObjectId)]
        public string Id { get; set; }
    }
    public class User : BaseEntity
    {
        public string Name { get; set; }
        public int No { get; set; }
        public DateTime Time { get; set; }
        public double Money { get; set; }
    }
            BsonDocument doc = new BsonDocument() 
            { 
                {"Name","Mongo"},
                {"No",102},
                {"Time",DateTime.Now},
                {"Money",102.123}
            };
            _daoMongo.Insert("MongoUser", doc);

            User model = new User() { Name = "MongoT", No = 1, Time = DateTime.Now, Money = 11.22 };
            _daoMongo.Insert<User>("MongoUser", model);
            List<User> List = new List<User>();
            for (int i = 0; i < 10; i++)
            {
                List.Add(new User() { Name = "MongoT" + i, No = i, Time = DateTime.Now, Money = 11.22 });
            }
            _daoMongo.Insert<User>("MongoUser", List);


            QueryDocument update = new QueryDocument() { { "Name", "22222" }, { "Money", 1000.555 } };
            _daoMongo.Update("MongoUser", Query<User>.EQ(m => m.No, 2), update);

            _daoMongo.Remove("MongoUser", Query<User>.EQ(m => m.No, 1));

            long aa = _daoMongo.Count("MongoUser", Query<User>.GT(m => m.No, 2));

            List<User> list = _daoMongo.GetList<User>("MongoUser", Query<User>.GT(m => m.No, 2), new string[] { "No" }, true);
            List<User> list2 = _daoMongo.GetPageList<User>("MongoUser", Query<User>.GT(m => m.No, 2), "No", true, 1, 6, out aa);

 

    /// <summary>
    /// GridFS文件处理
    /// </summary>
    public class GridFSHelper
    {
        private MongoServerHelper mongoServerHelper = new MongoServerHelper();
        protected internal MongoServer server = null;

        public GridFSHelper()
        {
            server = mongoServerHelper.GetMongoServer();
        }

        public string AddDoc(byte[] content, string ContentType, string fileName)
        {
            try
            {
                string fileID = Guid.NewGuid().ToString();
                this.server.Connect();
                MongoGridFSCreateOptions optioms = new MongoGridFSCreateOptions()
                {
                    ChunkSize = 261120,
                    UploadDate = DateTime.Now.AddHours(8),
                    ContentType = ContentType,
                    Id = fileID
                };
                MongoGridFS fs = new MongoGridFS(this.server, MongoServerHelper.dataBase, new MongoGridFSSettings() { Root = MongoServerHelper.fsName });

                using (MongoGridFSStream gfs = fs.Create(fileName, optioms))
                {
                    gfs.Write(content, 0, content.Length);
                }
                return fileID;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (this.server != null)
                    this.server.Disconnect();
            }
        }

        public byte[] GetDoc(string fileID)
        {
            try
            {
                this.server.Connect();
                MongoDatabase db = this.server.GetDatabase(MongoServerHelper.dataBase);
                MongoGridFS fs = new MongoGridFS(this.server, MongoServerHelper.dataBase, new MongoGridFSSettings() { Root = MongoServerHelper.fsName });
                byte[] bytes = null;
                MongoGridFSFileInfo info = fs.FindOneById(fileID);
                using (MongoGridFSStream gfs = info.Open(FileMode.Open))
                {
                    bytes = new byte[gfs.Length];
                    gfs.Read(bytes, 0, bytes.Length);
                }
                return bytes;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (this.server != null)
                    this.server.Disconnect();
            }
        }

        public bool DeleteDoc(string fileID)
        {
            if (string.IsNullOrEmpty(fileID))
                return false;

            try
            {
                this.server.Connect();
                MongoDatabase db = this.server.GetDatabase(MongoServerHelper.dataBase);
                MongoGridFS fs = new MongoGridFS(this.server, MongoServerHelper.dataBase, new MongoGridFSSettings() { Root = MongoServerHelper.fsName });
                fs.DeleteById(fileID);
                return true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (this.server != null)
                    this.server.Disconnect();
            }
        }
    }
        public ActionResult Load()
        {
            HttpPostedFileBase hpf = Request.Files["fileUpload"];
            string objectID;
            objectID = _gridFSHelper.AddDoc(StreamToBytes(hpf.InputStream), hpf.ContentType, hpf.FileName);
            return Content(objectID);
        }

 

 

推荐阅读