封装对MongoDB数据库的增删改查访问方法(基于MongoDB官方发布的C#驱动)
生活随笔
收集整理的這篇文章主要介紹了
封装对MongoDB数据库的增删改查访问方法(基于MongoDB官方发布的C#驱动)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文利用MongoDB官方發布的C#驅動,封裝了對MongoDB數據庫的增刪改查訪問方法。
先用官方提供的mongo-csharp-driver ,當前版本為1.7.0.4714
編寫數據庫訪問幫助類 MongoDbHelper.cs
using System; using System.Collections.Generic; using System.Linq; using MongoDB.Bson; using MongoDB.Driver; using MongoDB.Driver.Builders; using MongoDbTest.Models;namespace MongoDbTest {/// <summary>/// MongoDB幫助類/// </summary>internal static class MongoDbHelper{/// <summary>/// 獲取數據庫實例對象/// </summary>/// <param name="connectionString">數據庫連接串</param>/// <param name="dbName">數據庫名稱</param>/// <returns>數據庫實例對象</returns>private static MongoDatabase GetDatabase(string connectionString, string dbName){//創建數據庫鏈接var server = new MongoClient(connectionString).GetServer();//獲得數據庫實例對象return server.GetDatabase(dbName);}/// <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);}/// <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);}}var d = collection.Update(query, update, UpdateFlags.Multi);}/// <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, ObjectId id)where T : EntityBase{var db = GetDatabase(connectionString, dbName);var collection = db.GetCollection<T>(collectionName);return collection.FindOneById(id);}/// <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>/// <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();}/// <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();}} }數據庫配置參數 DbConfigParams.cs
using System.Configuration;namespace MongoDbTest {/// <summary>/// 數據庫配置參數/// </summary>internal static class DbConfigParams{private static string _conntionString = ConfigurationManager.AppSettings["MongoDBConn"];/// <summary>/// 獲取數據庫連接串/// </summary>public static string ConntionString{get { return _conntionString; }}private static string _dbName = ConfigurationManager.AppSettings["MongoDBName"];/// <summary>/// 獲取數據庫名稱/// </summary>public static string DbName{get { return _dbName; }}}}將集合名稱寫到C#代碼中作為字符串常量 CollectionNames.cs
namespace MongoDbTest {/// <summary>/// 將集合名稱寫到C#代碼中作為字符串常量/// </summary>public class CollectionNames{public const string User = "User";public const string Role = "Role";} }在配置文件中編寫數據庫連接串和數據庫名稱 App.config
<?xml version="1.0" encoding="utf-8" ?> <configuration><appSettings><!--MongoDB數據庫連接串--><add key="MongoDBConn" value="mongodb://127.0.0.1:27017"/><!--MongoDB數據庫名稱--><add key="MongoDBName" value="RsdfDb"/></appSettings> </configuration>編寫實體基類,其中含有默認的Id EntityBase.cs?
using MongoDB.Bson.Serialization.Attributes; using MongoDB.Bson;namespace MongoDbTest.Models {/// <summary>/// 實體基類/// </summary>public class EntityBase{/// <summary>/// 主鍵/// </summary> [BsonId]public ObjectId Id { get; set; }} }其中,State枚舉類定義如下: State.cs
namespace MongoDbTest.Models {public enum State{/// <summary>/// 正常/// </summary>Normal = 1,/// <summary>/// 未使用/// </summary>Unused = 2,} }編寫實體類 User.cs
namespace MongoDbTest.Models {public class User : EntityBase{public string UserName { get; set; }public int Age { get; set; }public State State { get; set; }} }編寫測試類
using System; using System.Collections.Generic; using MongoDB.Bson; using MongoDB.Driver.Builders; using MongoDbTest.Models;namespace MongoDbTest {class Program{static void Main(string[] args){Console.Title = "Mongo DB Test";//InsertTest();//QueryTest();//UpdateTest(); DeleteTest();Console.WriteLine("Finish!");Console.ReadLine();}/// <summary>/// 插入數據測試/// </summary>static void InsertTest(){var random = new Random();for (var i = 1; i <= 10; i++){var item = new User(){UserName = "我的名字" + i,Age = random.Next(25, 30),State = i % 2 == 0 ? State.Normal : State.Unused};MongoDbHelper.Insert(DbConfigParams.ConntionString, DbConfigParams.DbName, CollectionNames.User, item);}}/// <summary>/// 查詢測試/// </summary>static void QueryTest(){var queryBuilder = new QueryBuilder<User>();var query = queryBuilder.GTE(x => x.Age, 27);var ltModel = MongoDbHelper.GetManyByCondition<User>(DbConfigParams.ConntionString, DbConfigParams.DbName,CollectionNames.User, query);if (ltModel != null && ltModel.Count > 0){foreach (var item in ltModel){Console.WriteLine("姓名:{0},年齡:{1},狀態:{2}",item.UserName, item.Age, GetStateDesc(item.State));}}}/// <summary>/// 更新測試/// </summary>static void UpdateTest(){var queryBuilder = new QueryBuilder<User>();var query = queryBuilder.GTE(x => x.Age, 27);var dictUpdate = new Dictionary<string, BsonValue>();dictUpdate["State"] = State.Unused;MongoDbHelper.Update(DbConfigParams.ConntionString, DbConfigParams.DbName, CollectionNames.User, query,dictUpdate);}/// <summary>/// 刪除測試/// </summary>static void DeleteTest(){var queryBuilder = new QueryBuilder<User>();var query = queryBuilder.GTE(x => x.Age, 28);MongoDbHelper.DeleteByCondition(DbConfigParams.ConntionString, DbConfigParams.DbName, CollectionNames.User, query);}/// <summary>/// 獲取狀態描述/// </summary>/// <param name="state">狀態</param>/// <returns>狀態描述</returns>static string GetStateDesc(State state){string result = string.Empty;switch (state){ case State.Normal:result = "正常";break;case State.Unused:result = "未使用";break;default:throw new ArgumentOutOfRangeException("state");}return result;}} }測試結果:
轉載于:https://www.cnblogs.com/Bobby0322/p/5101994.html
總結
以上是生活随笔為你收集整理的封装对MongoDB数据库的增删改查访问方法(基于MongoDB官方发布的C#驱动)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Emmet使用手册
- 下一篇: Minecraft Forge编程入门一