c#整合mongodb

c#整合mongodb

前言:最近一个c#的项目完结了,在项目中要使用mongod来存储数据。因为是第一次使用c#整合mongodb,所以一开始也搜寻了许多资料,本来想着找一种框架来做的,后来发现没有合适的,就直接采用了mongodb官网支持c#的驱动包,后来发现还挺好用的。详细语言文档,可以参考mongodb官网。

1.添加引用

在这里插入图片描述

2.编写CRUD方法

class MongodbHelper
	{
		public static Logger logger = LogManager.GetCurrentClassLogger();

		/// <summary>
		/// mongo ip,端口
		/// </summary>
		private static String G_constr = "mongodb://127.0.0.1:27021";

		/// <summary>
		/// 若没有,根据传入的数据库名字来生成对应的数据库名,否则,返回db
		/// </summary>
		/// <param name="dbname"></param>
		/// <returns></returns>
		public static IMongoDatabase GetDb(string dbName)
		{
			var db = new MongoClient(G_constr).GetDatabase(dbName);
			return db;
		}

		/// <summary>
		/// 返回参数数据库中的一个集合
		/// </summary>
		/// <typeparam name="T"></typeparam>
		/// <param name="tableName">表名</param>
		/// <returns></returns>
		public static IMongoCollection<T> GetCT<T>(string dbName, string tableName)
		{
			return GetDb(dbName).GetCollection<T>(tableName);
		}

		/// <summary>
		/// 向指定数据库中集合插入数据
		/// </summary>
		/// <typeparam name="T"></typeparam>
		/// <param name="dbName"></param>
		/// <param name="tableName"></param>
		/// <param name="document"></param>
		public static void Insert<T>(string dbName, string tableName, T document)
		{
			try
			{
				var collection = GetCT<T>(dbName, tableName);
				collection.InsertOne(document);
			}
			catch (Exception ex)
			{
				logger.Error("插入异常" + ex.StackTrace);
			}

		}


		/// <summary>
		/// 插入多条数据,同一个类型
		/// </summary>
		/// <typeparam name="T"></typeparam>
		/// <param name="G_constr"></param>
		/// 
		/// 
		/// <param name="documents"></param>
		public static void InsertMany<T>(string dbName, string tableName, List<T> list)
		{
			try
			{
				var db = new MongoClient(G_constr).GetDatabase(dbName);
				var collection = db.GetCollection<T>(tableName);
				collection.InsertMany(list.AsEnumerable());
			}
			catch (Exception ex)
			{
				logger.Error("InsertMany" + ex.StackTrace);
			}
		}

		/// <summary>
		/// 获取指定数据库集合中的所有的文档
		/// </summary>
		/// <typeparam name="T"></typeparam>
		/// <param name="tableName"></param>
		/// <returns></returns>
		public static List<T> FindAll<T>(string dbName, string tableName)
		{
			List<T> list = new List<T>();
			try
			{
				var collection = GetCT<T>(dbName, tableName);
				FilterDefinition<T> filter = Builders<T>.Filter.Empty;
				list = collection.Find<T>(filter).ToList<T>();
			}
			catch (Exception ex)
			{
				logger.Error("FindAll" + ex.StackTrace);
			}
			return list;
		}

		/// <summary>
		/// 清库
		/// </summary>
		/// <typeparam name="T"></typeparam>
		/// <param name="tableName"></param>
		/// <returns></returns>
		public static bool Delete<T>(string dbName,string tableName)
		{
			var collection = GetCT<T>(dbName, tableName);
			FilterDefinition<T> filter = Builders<T>.Filter.Empty;
			DeleteResult result = collection.DeleteMany(filter);
			if (result != null && result.DeletedCount > 0)
			{
				return true;
			}
			return false;
		}

		/// <summary>
		/// 更新
		/// </summary>
		public static void update<T>(string dbName, string tableName, string param, string value)
		{
			var collection = GetCT<T>(dbName, tableName);
			var filter = Builders<T>.Filter.Eq("Name", param);
			var update = Builders<T>.Update.Set(value, "zhangsan");
			collection.UpdateOne(filter, update);
		}

	}

对于按条件来进行操作,类似sql语句中的where,在mongodb中对应的是FilterDefinitionBuilder ,这里面有许多方法,可以点88行的Empty进去看看,命名都易懂。

3.编写实体类测试

class User
	{
		   
		public string Name { get; set; }
		public string Sex { set; get; }
	}
class MongoTest
{
    static void Main(string[] args) {
      User user = new User("zhangsan", "男");  
      MongoHelper.Insert<User>("TEST", "USR",user);
    }
    
}

{
static void Main(string[] args) {
User user = new User(“zhangsan”, “男”);
MongoHelper.Insert(“TEST”, “USR”,user);
}

}


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值