MongoDB 常用操作
阿新 • • 發佈:2020-12-25
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using MongoDB.Bson; using MongoDB.Driver; namespace DSFinanceSystem { public class DSMongoDBConn { /// <summary> /// 資料庫連線(無密碼) /// </summary> public static string Conn { get; set; } = "mongodb://127.0.0.1:27017"; /// <summary> /// 資料庫名稱 /// </summary> public static string DataBaseName { get; set; } = "DSFinance"; /// <summary> /// 集合名稱 /// </summary> public static string CollectionName { get; set; } = "Finance"; } public class DSMongoDB { /// <summary> /// 初始化 /// </summary> /// <param name="conn"></param> public static void InitMonogoDB() { Client = new MongoClient(DSMongoDBConn.Conn); DataBase = Client.GetDatabase(DSMongoDBConn.DataBaseName); } /// <summary> /// 定義介面 /// </summary> public static IMongoDatabase DataBase { get; set; } /// <summary> /// 定義客戶端 /// </summary> public static IMongoClient Client { get; set; } /// <summary> /// 獲取集合 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="name"></param> /// <returns></returns> public static IMongoCollection<T> GetCollection<T>() { IMongoCollection<T> collection = DataBase.GetCollection<T>(DSMongoDBConn.CollectionName); Filter = new BsonDocument(); return collection; } public static BsonDocument Filter { get; set; } = new BsonDocument(); public static async Task InsertOneAsync<T>(T t) { try { var collection = GetCollection<T>(); await collection.InsertOneAsync(t); } catch (Exception e) { throw; } } public static void InsertOne<T>(T t) { try { var collection = GetCollection<T>(); collection.InsertOne(t); } catch (Exception e) { throw; } } /// <summary> /// 刪除第一行資料 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="key"></param> /// <param name="value"></param> public static void DeleteOne<T>(string key, object value) { try { var collection = GetCollection<T>(); collection.DeleteOne(Builders<T>.Filter.Eq(key, value)); } catch (Exception e) { throw; } } public static async Task DeleteOneAsync<T>(string key, object value) { try { var collection = GetCollection<T>(); await collection.DeleteOneAsync(Builders<T>.Filter.Eq(key, value)); } catch (Exception e) { throw; } } public static void DeleteMany<T>(string key, object value) { try { var collection = GetCollection<T>(); collection.DeleteMany(Builders<T>.Filter.Eq(key, value)); } catch (Exception e) { throw; } } public static async Task DeleteManyAsync<T>(string key, object value) { try { var collection = GetCollection<T>(); await collection.DeleteManyAsync(Builders<T>.Filter.Eq(key, value)); } catch (Exception e) { throw; } } public static void UpdateOne<T>(string key, object oldValue, object newValue) { try { var collection = GetCollection<T>(); var filter = Builders<T>.Filter.Eq(key, oldValue); var update = Builders<T>.Update.Set(key, newValue); collection.UpdateOne(filter, update); //UpdateOne修改一條,UpdateMany修改全部 } catch (Exception e) { throw; } } public static void UpdateMany<T>(string key, object oldValue, object newValue) { try { var collection = GetCollection<T>(); var filter = Builders<T>.Filter.Eq(key, oldValue); var update = Builders<T>.Update.Set(key, newValue); collection.UpdateMany(filter, update); //UpdateOne修改一條,UpdateMany修改全部 } catch (Exception e) { throw; } } public static async Task UpdateOneAsync<T>(string key, object oldValue, object newValue) { try { var collection = GetCollection<T>(); var filter = Builders<T>.Filter.Eq(key, oldValue); var update = Builders<T>.Update.Set(key, newValue); await collection.UpdateOneAsync(filter, update); //UpdateOne修改一條,UpdateMany修改全部 } catch (Exception e) { throw; } } public static async Task UpdateManyAsync<T>(string key, object oldValue, object newValue) { try { var collection = GetCollection<T>(); var filter = Builders<T>.Filter.Eq(key, oldValue); var update = Builders<T>.Update.Set(key, newValue); await collection.UpdateManyAsync(filter, update); //UpdateOne修改一條,UpdateMany修改全部 } catch (Exception e) { throw; } } public static List<T> Find<T>(string key, object value) { try { var collection = GetCollection<T>(); var res = collection.Find(Builders<T>.Filter.Eq(key, value)).ToList(); return res; } catch (Exception e) { throw; } return default; } public static List<T> Find<T>() { try { var collection = GetCollection<T>(); var res = collection.Find(Filter).ToList(); return res; } catch (Exception e) { throw; } return default; } /// <summary> /// 獲取前count條資料 /// </summary> /// <param name="key"></param> /// <param name="count"></param> /// <param name="asc">true=正序 , false=反序</param> /// <typeparam name="T"></typeparam> /// <returns></returns> public static List<T> Find<T>(string key,int count,bool asc) { try { var list = Sort<T>(key,count,asc); return list; } catch (Exception e) { throw; } return default; } /// <summary> /// 排序 /// </summary> /// <param name="key"></param> /// <param name="count"></param> /// <param name="asc"></param> /// <typeparam name="T"></typeparam> /// <returns></returns> private static List<T> Sort<T>(string key,int count, bool asc = true) { var coll = GetCollection<T>(); FilterDefinitionBuilder<T> builderFilter = Builders<T>.Filter; //排序生成器 SortDefinitionBuilder<T> builderSort = Builders<T>.Sort; //排序約束 Ascending 正序 Descending 倒序 SortDefinition<T> sort = null; if (asc) { sort = builderSort.Ascending(key); } else { sort = builderSort.Descending(key); } try { var result = coll.Find<T>(Filter).Sort(sort).Limit(count).ToList(); return result; } catch (Exception) { throw; } return default; } } }