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);
}
}