利用MongoDB for C# Driver編寫訪問MongoDB數據庫的幫助類。
1、創建數據庫連接
/// <summary> /// 獲取數據庫實例對象 /// </summary> /// <param name="connectionString">數據庫連接串</param> /// <param name="dbName">數據庫名稱</param> /// <returns>數據庫實例對象</returns> private static MongoDatabase GetDatabase(string connectionString, string dbName) { var server = MongoServer.Create(connectionString); return server.GetDatabase(dbName); }
2、新增數據
/// <summary> /// 插入一條記錄 /// </summary> /// <typeparam name="T">數據類型</typeparam> /// <param name="connectionString">數據庫連接串</param> /// <param name="dbName">數據名稱</param> /// <param name="collectionName">集合名稱</param> /// <param name="model">數據對象</param> public static void Insert<T>(string connectionString, string dbName, string collectionName, T model) where T : EntityBase { if (model == null) { throw new ArgumentNullException("model", "待插入數據不能為空"); } var db = GetDatabase(connectionString, dbName); var collection = db.GetCollection<T>(collectionName); collection.Insert(model); }
3、更新數據
/// <summary> /// 更新數據 /// </summary> /// <param name="connectionString">數據庫連接串</param> /// <param name="dbName">數據庫名稱</param> /// <param name="collectionName">集合名稱</param> /// <param name="query">查詢條件</param> /// <param name="dictUpdate">更新字段</param> public static void Update(string connectionString, string dbName, string collectionName, IMongoQuery query, Dictionary<string, BsonValue> dictUpdate) { var db = GetDatabase(connectionString, dbName); var collection = db.GetCollection(collectionName); var update = new UpdateBuilder(); if (dictUpdate != null && dictUpdate.Count > 0) { foreach (var item in dictUpdate) { update.Set(item.Key, item.Value); } } collection.Update(query, update, UpdateFlags.Multi); } /// <summary> /// 更新數據 /// </summary> /// <param name="connectionString">數據庫連接串</param> /// <param name="dbName">數據庫名稱</param> /// <param name="collectionName">集合名稱</param> /// <param name="query">查詢條件</param> /// <param name="update">更新條件</param> public static void Update(string connectionString, string dbName, string collectionName, IMongoQuery query, IMongoUpdate update) { var db = GetDatabase(connectionString, dbName); var collection = db.GetCollection(collectionName); collection.Update(query, update, UpdateFlags.Multi); }
4、查詢數據
/// <summary> /// 根據ID獲取數據對象 /// </summary> /// <typeparam name="T">數據類型</typeparam> /// <param name="connectionString">數據庫連接串</param> /// <param name="dbName">數據庫名稱</param> /// <param name="collectionName">集合名稱</param> /// <param name="id">ID</param> /// <returns>數據對象</returns> public static T GetById<T>(string connectionString, string dbName, string collectionName, string id) where T : EntityBase { var db = GetDatabase(connectionString, dbName); var collection = db.GetCollection<T>(collectionName); var tId = new ObjectId(id); return collection.FindOneById(tId); } /// <summary> /// 根據查詢條件獲取一條數據 /// </summary> /// <typeparam name="T">數據類型</typeparam> /// <param name="connectionString">數據庫連接串</param> /// <param name="dbName">數據庫名稱</param> /// <param name="collectionName">集合名稱</param> /// <param name="query">查詢條件</param> /// <returns>數據對象</returns> public static T GetOneByCondition<T>(string connectionString, string dbName, string collectionName, IMongoQuery query) where T : EntityBase { var db = GetDatabase(connectionString, dbName); var collection = db.GetCollection<T>(collectionName); return collection.FindOne(query); } /// <summary> /// 根據查詢條件獲取多條數據 /// </summary> /// <typeparam name="T">數據類型</typeparam> /// <param name="connectionString">數據庫連接串</param> /// <param name="dbName">數據庫名稱</param> /// <param name="collectionName">集合名稱</param> /// <param name="query">查詢條件</param> /// <returns>數據對象集合</returns> public static List<T> GetManyByCondition<T>(string connectionString, string dbName, string collectionName, IMongoQuery query) where T : EntityBase { var db = GetDatabase(connectionString, dbName); var collection = db.GetCollection<T>(collectionName); return collection.Find(query).ToList(); } /// <summary> /// 根據查詢條件獲取多條數據(分頁) /// </summary> /// <typeparam name="T">數據類型</typeparam> /// <param name="connectionString">數據庫連接串</param> /// <param name="dbName">數據庫名稱</param> /// <param name="collectionName">集合名稱</param> /// <param name="query">查詢條件</param> /// <param name="sortBy">排序</param> /// <param name="pageIndex">頁號</param> /// <param name="pageSize">每頁大小</param> /// <returns>分頁數據集合</returns> public static PagingList<T> GetManyByPageCondition<T>(string connectionString, string dbName, string collectionName, IMongoQuery query, IMongoSortBy sortBy, int pageIndex, int pageSize) where T : EntityBase { var db = GetDatabase(connectionString, dbName); var collection = db.GetCollection<T>(collectionName); var result = new PagingList<T>(); result.Total = (int)collection.Count(query); result.CurrentPageList = collection.Find(query).SetSortOrder(sortBy).SetSkip((pageIndex - 1)*pageSize).SetLimit(pageSize).ToList(); return result; } /// <summary> /// 獲取集合中的所有數據 /// </summary> /// <typeparam name="T">數據類型</typeparam> /// <param name="connectionString">數據庫連接串</param> /// <param name="dbName">數據庫名稱</param> /// <param name="collectionName">集合名稱</param> /// <returns>數據對象集合</returns> public static List<T> GetAll<T>(string connectionString, string dbName, string collectionName) where T : EntityBase { var db = GetDatabase(connectionString, dbName); var collection = db.GetCollection<T>(collectionName); return collection.FindAll().ToList(); }
5、刪除數據
/// <summary> /// 刪除集合中符合條件的數據 /// </summary> /// <param name="connectionString">數據庫連接串</param> /// <param name="dbName">數據庫名稱</param> /// <param name="collectionName">集合名稱</param> /// <param name="query">查詢條件</param> public static void DeleteByCondition(string connectionString, string dbName, string collectionName, IMongoQuery query) { var db = GetDatabase(connectionString, dbName); var collection = db.GetCollection(collectionName); collection.Remove(query); } /// <summary> /// 刪除集合中的所有數據 /// </summary> /// <param name="connectionString">數據庫連接串</param> /// <param name="dbName">數據庫名稱</param> /// <param name="collectionName">集合名稱</param> public static void DeleteAll(string connectionString, string dbName, string collectionName) { var db = GetDatabase(connectionString, dbName); var collection = db.GetCollection(collectionName); collection.RemoveAll(); }