xuol001 发表于 2015-7-7 05:54:52

NoSql之MongoDB(系列二)

  上篇讲了MongoDB的安装和基本操作,今天主要是写了个MongoDB的Helper类,可能以后会用到。MongoDB本身是用C++写的.C#需要通过驱动来调用,主要有以下两种:
  官方驱动:https://github.com/mongodb/mongo-csharp-driver/downloads。
  samus驱动:https://github.com/samus/mongodb-csharp/downloads。
  我用的则是samus驱动.
  
  
  using MongoDB;      
using MongoDB.Linq;      
using MongoDB.Configuration;
  namespace Simple      
{      
   public sealed partial class MongoDBHelper      
   {
        public static string ServerString { get; set; }
        public static bool Pooled { get; set; }
      public static TimeSpan ConnectionTimeout { get; set; }
        public static TimeSpan ConnectionLifetime { get; set; }
        public static int MinimumPoolSize { get; set; }
        public static int MaximumPoolSize { get; set; }
        ///      
      /// 实现linq查询的映射配置      
      ///         
      ///         
      ///         
      public static MongoConfigurationBuilder MongoConfigurationBuilerMapping()      
         where T : class      
      {      
         var config = new MongoConfigurationBuilder();
           config.Mapping(mapping =>   
         {      
            mapping.DefaultProfile(profile =>      
            {      
               profile.SubClassesAre(t => t.IsSubclassOf(typeof(T)));      
            });      
            mapping.Map();      
            mapping.Map();      
         });
           MongoConfigurationConnection(config);   
         return config;      
      }
      ///      
      /// 配置MongoDB参数      
      ///         
      ///         
      public static void MongoConfigurationConnection(MongoConfigurationBuilder config)      
      {      
         if (config != null)      
         {      
            MongoConfigrationProperty();      
            Action connectionString = (c) =>      
            {      
               c.Pooled = Pooled;      
               c.AddServer(new MongoServerEndPoint(ServerString));      
               c.ConnectionTimeout = ConnectionTimeout;      
               c.ConnectionLifetime = ConnectionLifetime;      
               c.MinimumPoolSize = MinimumPoolSize;      
               c.MaximumPoolSize = MaximumPoolSize;      
            };      
            config.ConnectionString(connectionString);      
         }      
      }
        public static void MongoConfigrationProperty()      
      {      
         //获取配置文件的各项配置数据      
      }
        ///      
      /// 插入单条数据      
      ///         
      ///         
      ///         
      ///         
      ///       
      public static void InsertOne(string dataBaseName, string collectionName, T entity)      
         where T : class      
      {      
         using (IMongo mongo = new Mongo(MongoConfigurationBuilerMapping().BuildConfiguration()))      
         {      
            mongo.Connect();
              IMongoDatabase dataBase = mongo.GetDatabase(dataBaseName);      
            IMongoCollection collection = dataBase.GetCollection(collectionName);      
            collection.Insert(entity, true);
              if (mongo.TryConnect()) mongo.Disconnect();      
         }      
      }
        ///      
      /// 插入多条新数据      
      ///         
      ///         
      ///         
      ///         
      ///       
      public static void InsertAll(string dataBaseName, string collectionName, IEnumerable entitys)      
         where T : class      
      {      

           using (IMongo mongo = new Mongo(MongoConfigurationBuilerMapping().BuildConfiguration()))      
         {      
            mongo.Connect();
              IMongoDatabase dataBase = mongo.GetDatabase(dataBaseName);      
            IMongoCollection collection = dataBase.GetCollection(collectionName);   
            collection.Insert(entitys, true);
              if (mongo.TryConnect()) mongo.Disconnect();   
         }
        }
        ///      
      /// 修改数据      
      ///         
      ///         
      ///         
      ///         
      ///         
      ///       
      public static void UpdateOne(string dataBaseName, string collectionName, Expression selector, T entity)   
         where T : class      
      {      

           using (IMongo mongo = new Mongo(MongoConfigurationBuilerMapping().BuildConfiguration()))      
         {      
            mongo.Connect();
              IMongoDatabase dataBase = mongo.GetDatabase(dataBaseName);      
            IMongoCollection collection = dataBase.GetCollection(collectionName);   
            collection.Update(entity, selector, true);
              if (mongo.TryConnect()) mongo.Disconnect();   
         }
        }
        ///      
      /// 修改多条记录      
      ///         
      ///         
      ///         
      ///         
      ///         
      ///       

        public static void UpdateAll(string dataBaseName, string collectionName, Expression selector, T entity)   
         where T : class      
      {
           using (IMongo mongo = new Mongo(MongoConfigurationBuilerMapping().BuildConfiguration()))      
         {      
            mongo.Connect();
              IMongoDatabase dataBase = mongo.GetDatabase(dataBaseName);      
            IMongoCollection collection = dataBase.GetCollection(collectionName);
           collection.Update(entity, selector, UpdateFlags.MultiUpdate, true); //UpdateFlags.Upsert: 如果不存在Update的记录,插objNew      
                                                                               //UpdateFlags.MultiUpdate: 把按条件查出来多条记录全部更新.      
            if (mongo.TryConnect()) mongo.Disconnect();      
         }
        }
        ///      
      /// 删除数据      
      ///         
      ///         
      ///         
      ///         
      ///         
      public static void Delete(string dataBaseName, string collectionName, Expression selector)      

           where T : class      
      {
           using (IMongo mongo = new Mongo(MongoConfigurationBuilerMapping().BuildConfiguration()))      
         {      
            mongo.Connect();
              IMongoDatabase dataBase = mongo.GetDatabase(dataBaseName);      
            IMongoCollection collection = dataBase.GetCollection(collectionName);
              collection.Remove(selector, true);
              if (mongo.TryConnect()) mongo.Disconnect();   
         }
        }
        ///      
      /// Linq方式获取列表      
      ///         
      ///         
      ///         
      ///         
      ///         
      ///         
      ///         
      ///       
      public static List GetListLinq(int pageIndex, int pageSize, string dataBaseName, string collectionName, Expression selector)      
         where T : class      
      {      
         List reslut = null;
           using (IMongo mongo = new Mongo(MongoConfigurationBuilerMapping().BuildConfiguration()))      
         {      
            mongo.Connect();
              IMongoDatabase dataBase = mongo.GetDatabase(dataBaseName);      
            IMongoCollection collection = dataBase.GetCollection(collectionName);
              reslut = collection.Linq().Where(selector).   
                     Skip(pageSize * (pageIndex - 1)).      
                     Take(pageSize).ToList();      
            if (mongo.TryConnect()) mongo.Disconnect();      
         }
           return reslut;      
      }
        ///      
      /// Document方式获取列表      
      ///         
      ///         
      ///         
      ///         
      ///         
      ///         
      ///         
      ///       
    public static List GetListDocument(int pageIndex, int pageSize, string dataBaseName, string collectionName, object selector)      
      where T : class      
      {      

           List reslut = null;
           using (IMongo mongo = new Mongo(MongoConfigurationBuilerMapping().BuildConfiguration()))      
         {      
            mongo.Connect();
              IMongoDatabase dataBase = mongo.GetDatabase(dataBaseName);      
            IMongoCollection collection = dataBase.GetCollection(collectionName);
              reslut = collection.Find(selector)   
                         .Skip(pageSize * (pageIndex - 1))      
                         .Limit(pageSize).Documents.ToList();
              if (mongo.TryConnect()) mongo.Disconnect();   
         }
           return reslut;      
      }      
   }      
}
页: [1]
查看完整版本: NoSql之MongoDB(系列二)