该类封装了 MongoDB的一些常用操作,使用只需要从该类继承,并实现GetDataBaseName() 获取数据库名称方法 和 GetCollectionName()获取集合名称,即可实现MongoDB的CRUD操作,该基类带一个MongoDB 分页方法。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using MongoDB.Driver; using MongoDB.Bson; using MongoDB.Driver.Builders; namespace sc.MongoDBDataAccess { public abstract class BaseMgDAL<T> { static readonly string connectionString = System.Configuration.ConfigurationManager.AppSettings["MongoDBConn"]; //string.Empty ;// "mongodb://localhost"; static MongoClient client = null; static protected MongoServer server = null; protected MongoDatabase database = null;//子类的数据库 protected MongoCollection<T> collection = null;//子类的集合 static SortByDocument DEF_SORT_ASC = new SortByDocument("_id", 1); static SortByDocument DEF_SORT_DESC = new SortByDocument("_id", -1); //////////////////////////////////split line/////////////////////////////// /// <summary> /// 静态构造函数 /// </summary> static BaseMgDAL() { client = new MongoClient(connectionString); server = client.GetServer(); } /// <summary> /// 构造函数 /// </summary> public BaseMgDAL() { database = server.GetDatabase(GetDataBaseName()); collection = database.GetCollection<T>(GetCollectionName()); } /// <summary> /// 插入一个项目 /// </summary> /// <param name="obj">要插入的项目</param> /// <returns>返回该对象</returns> public T Insert(T obj) { collection.Insert(obj); return obj; } /// <summary> /// 更新一条数据 /// </summary> /// <param name="obj"></param> /// <returns></returns> public bool Update(T obj) { try { collection.Save(obj); return true; } catch (Exception ex) { throw ex; } } /// <summary> /// 删除一条数据 /// </summary> /// <param name="id"></param> /// <returns></returns> public bool Delete(ObjectId id) { try { var querry = Query.EQ("_id", id); collection.Remove(querry); return true; } catch (Exception ex) { throw ex; } } /// <summary> /// 根据ObjectId获取数据 /// </summary> /// <param name="id"></param> /// <returns></returns> public T GetByID(ObjectId id) { var query = Query.EQ("_id", id); var result = collection.FindOne(query); return result; } /// <summary> /// 返回分页结果 /// </summary> /// <param name="query">查询条件</param> /// <param name="collection">集合</param> /// <param name="startIndex">开始序号</param> /// <param name="endIndex">结束序号</param> /// <returns>查询的结果集</returns> public MongoCursor<T> MongoDBPage(IMongoQuery mongoQuery, MongoCollection<T> collection, long startIndex, long endIndex) { if (startIndex < 0 || endIndex < 0) throw new ArgumentException("索引必须从零开始,且不能小于零"); long maxSize = MongoDBCount(mongoQuery, collection);//查询总数据 if (startIndex > maxSize) return null; //获取要返回的数据大小 long selectSize = startIndex + endIndex; if (selectSize > maxSize) selectSize = maxSize; long returnSize = selectSize - startIndex; return collection.Find(mongoQuery).SetSortOrder(DEF_SORT_ASC) .SetLimit((int)selectSize) .SetSortOrder(DEF_SORT_DESC) .SetLimit((int)returnSize) .SetSortOrder(DEF_SORT_ASC); } /// <summary> /// 获取结果集大小 /// </summary> /// <param name="query">查询条件</param> /// <param name="collection">MongoDB集合</param> /// <returns></returns> public long MongoDBCount(IMongoQuery mongoQuery, MongoCollection<T> collection) { return collection.Find(mongoQuery).Count(); } public abstract string GetDataBaseName(); public abstract string GetCollectionName(); } }