MongoDB基本操作之(mongodb的簡單封裝)
阿新 • • 發佈:2018-12-24
具體的程式碼實現如下:
/********************************************* * CLR 版本: 4.0.30319.42000 * 類 名 稱: MongoHelper * 機器名稱: MS-20170310FLQY * 名稱空間: ConsoleApplication1 * 文 件 名: MongoHelper * 建立時間: 2017/6/28 11:19:40 * 作 者: Choj * 說 明: * 修改時間: * 修 改 人: * *********************************************/ using MongoDB.Bson; using MongoDB.Driver; using MongoDB.Driver.Builders; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Choj.NoSql { /// <summary> /// MongoHelper /// </summary> public class MongoHelper<T> where T : class, new() { #region 基本屬性 /// <summary> /// 資料庫連線 /// </summary> private string connString = "mongodb://127.0.0.1:27017"; /// <summary> /// 指定的資料庫 /// </summary> private string dbName = "dbName"; /// <summary> /// 指定的集合 /// </summary> private string colName = "colName"; /// <summary> /// 建立資料連線 /// </summary> static MongoServer server; /// <summary> /// 獲取指定資料庫 /// </summary> static MongoDatabase db; /// <summary> /// 獲取集合 /// </summary> static MongoCollection<T> col; #endregion #region 建構函式 /// <summary> /// 建構函式 /// </summary> public MongoHelper() { Init(null, null, null); } /// <summary> /// 建構函式 /// </summary> /// <param name="connString">連線字串</param> public MongoHelper(string connString) { Init(connString, null, null); } /// <summary> /// 建構函式 /// </summary> /// <param name="connString">連線字串</param> /// <param name="dbName">資料庫名</param> public MongoHelper(string connString, string dbName) { Init(connString, dbName, null); } /// <summary> /// 建構函式 /// </summary> /// <param name="connString">連線字串</param> /// <param name="dbName">資料庫名</param> /// <param name="colName">資料庫表名</param> public MongoHelper(string connString, string dbName, string colName) { Init(connString, dbName, colName); } #endregion #region 初始化 /// <summary> /// 初始化 /// </summary> /// <param name="connString">連線字串</param> /// <param name="dbName">資料庫</param> /// <param name="colName">集合名</param> public void Init(string connString = null, string dbName = null, string colName = null) { if (server == null) { server = new MongoClient(connString).GetServer(); db = server.GetDatabase(dbName); col = db.GetCollection<T>(colName); } } #endregion #region 基本方法 /// <summary> /// 新增 /// </summary> /// <param name="T">T</param> /// <returns></returns> public WriteConcernResult Insert(T t) { return col.Insert(t); } /// <summary> /// 根據bsonValue 刪除 /// </summary> /// <param name="bsonValue"></param> /// <param name="name"></param> /// <returns></returns> public WriteConcernResult Remove(string bsonValue, string name = "_id") { //查詢當前的文件 var query = Query.EQ(name, bsonValue); //刪除文件 return col.Remove(query); } /// <summary> /// 更新 /// </summary> /// <param name="t">泛型</param> /// <param name="bsonValue">bsonValue的值</param> /// <param name="name"></param> /// <returns></returns> public WriteConcernResult Update(T t, string bsonValue, string name = "_id") { //BsonDocument var bd = BsonExtensionMethods.ToBsonDocument(t); //query var query = Query.EQ(name, bsonValue); return col.Update(query, new UpdateDocument(bd)); } /// <summary> /// 獲取某一文件 /// </summary> /// <param name="bsonValue"></param> /// <param name="name"></param> /// <returns></returns> public T GetObject(string bsonValue, string name = "_id") { //條件查詢 return col.FindOne(Query.EQ(name, bsonValue)); } /// <summary> /// 按條件查詢 /// </summary> /// <param name="pageInfo">分頁的資訊</param> /// <returns></returns> public MongoCursor<T> GetListByPage(IMongoQuery query, PageInfo pageInfo, out long record) { var result = col.Find(query).SetSkip((pageInfo.PageIndex - 1) * pageInfo.PageSize).SetLimit(pageInfo.PageSize); if (pageInfo.Sort == null || pageInfo.Sort.Count() == 0) { } else { if (pageInfo.Direction == Direction.DESC) { result = result.SetSortOrder(SortBy.Descending(pageInfo.Sort)); } else { result = result.SetSortOrder(SortBy.Ascending(pageInfo.Sort)); } } record = result.Count(); return result; } /// <summary> /// 查詢所有 /// </summary> public MongoCursor<T> GetAll() { return col.FindAll(); } /// <summary> /// 建立索引 /// </summary> /// <param name="kNames">索引的值</param> public void EnsureIndex(string[] kNames) { var doc = new MongoDB.Driver.IndexKeysDocument(); foreach (var name in kNames) { doc.Add(name, 1); } col.EnsureIndex(doc); } /// <summary> /// 建立索引 /// </summary> /// <param name="kNames">索引的值</param> /// <returns></returns> public WriteConcernResult CreateIndex(string[] kNames) { var doc = new MongoDB.Driver.IndexKeysDocument(); foreach (var name in kNames) { doc.Add(name, 1); } return col.CreateIndex(doc); } /// <summary> /// 獲取索引 /// </summary> /// <returns></returns> public GetIndexesResult GetIndexes() { return col.GetIndexes(); } /// <summary> /// 刪除文件 /// </summary> /// <returns></returns> public CommandResult Drop() { return col.Drop(); } /// <summary> /// 刪除所有的索引 /// </summary> /// <returns></returns> public CommandResult DropAllIndexes() { return col.DropAllIndexes(); } /// <summary> /// 刪除制定的索引 /// </summary> /// <param name="names"></param> /// <returns></returns> public CommandResult DropIndex(string[] names) { return col.DropIndex(names); } /// <summary> /// 刪除制定的索引名稱 /// </summary> /// <param name="name"></param> /// <returns></returns> public CommandResult DropIndexByName(string name) { return col.DropIndexByName(name); } /// <summary> /// 驗證文件是否存在 /// </summary> /// <returns></returns> public bool Exists() { return col.Exists(); } /// <summary> /// 查詢 /// </summary> /// <param name="query"></param> /// <returns></returns> public MongoCursor<T> sad(IMongoQuery query) { return col.Find(query); } /// <summary> /// 查詢 /// </summary> /// <param name="documentType"></param> /// <returns></returns> public MongoCursor FindAllAs(Type documentType) { return col.FindAllAs(documentType); } /// <summary> /// 查詢並刪除 /// </summary> /// <param name="query">查詢條件</param> /// <param name="sortBy">排序方式</param> /// <param name="update">更新</param> /// <param name="returnNew">返回新的值</param> /// <param name="upSert"></param> /// <returns></returns> public FindAndModifyResult FindAndModify(IMongoQuery query, IMongoSortBy sortBy, IMongoUpdate update, bool returnNew = false, bool upSert = false) { return col.FindAndModify(query, sortBy, update, returnNew, upSert); } /// <summary> /// 查詢並且刪除 /// </summary> /// <param name="query"></param> /// <param name="sortBy"></param> /// <returns></returns> public FindAndModifyResult FindAndModify(IMongoQuery query, IMongoSortBy sortBy) { return col.FindAndRemove(query, sortBy); } /// <summary> /// 系統會隨機查詢獲取到滿足條件的一條記錄 /// </summary> /// <returns></returns> public T FindOne() { return col.FindOne(); } /// <summary> /// 根據Id獲取第一個 /// </summary> /// <param name="bsonValue"></param> public T FindOneById(BsonValue bsonValue) { return col.FindOneById(bsonValue); } /// <summary> /// 根據Id獲取第一個 /// </summary> /// <param name="documentType">文件型別</param> /// <param name="bsonValue">id</param> /// <returns></returns> public object FindOneById(Type documentType,BsonValue bsonValue) { return col.FindOneByIdAs(documentType, bsonValue); } /// <summary> /// 根據文件名稱 /// </summary> /// <returns></returns> public string FullName() { return col.FullName; } /// <summary> /// 根據當前的條件或者最近的文件 /// </summary> /// <param name="query"></param> /// <param name="x"></param> /// <param name="y"></param> /// <param name="limit"></param> /// <param name="options"></param> /// <returns></returns> public GeoNearResult<T> GeoNear(IMongoQuery query, double x, double y, int limit,IMongoGeoNearOptions options) { return col.GeoNear(query, x, y, limit, options); } /// <summary> /// 獲取當前的集合的狀態 /// </summary> /// <returns></returns> public CollectionStatsResult GetStats() { return col.GetStats(); } /// <summary> /// 獲取總的資料大小 /// </summary> public long GetTotalDataSize() { return col.GetTotalDataSize(); } /// <summary> /// 獲取總的儲存大小 /// </summary> /// <returns></returns> public long GetTotalStorageSize() { return col.GetTotalStorageSize(); } /// <summary> /// 驗證當前的索引是否存在 /// </summary> /// <param name="names"></param> public bool IndexExists(string[] names) { return col.IndexExists(names); } /// <summary> /// 驗證當前的索引是否存在 /// </summary> /// <param name="names"></param> public bool IndexExistsByName(string name) { return col.IndexExistsByName(name); } /// <summary> /// 插入資料 /// </summary> /// <param name="t"></param> /// <param name="options"></param> /// <returns></returns> public WriteConcernResult Insert(T t, MongoInsertOptions options) { return col.Insert(t, options); } /// <summary> /// 批量插入資料 /// </summary> /// <param name="lstT"></param> /// <param name="options"></param> /// <returns></returns> public IEnumerable<WriteConcernResult> Insert(IEnumerable<T> lstT, MongoInsertOptions options = null) { if (options == null) { return col.InsertBatch(lstT); } else { return col.InsertBatch(lstT, options); } } /// <summary> /// 標識否允許刪除裡面的文件資料 /// </summary> /// <returns></returns> public bool IsCapped() { return col.IsCapped(); } /// <summary> /// 獲取集合的名稱 /// </summary> /// <returns></returns> public string Name() { return col.Name; } /// <summary> /// 刪除所有的資料 /// </summary> /// <returns></returns> public WriteConcernResult RemoveAll() { return col.RemoveAll(); } /// <summary> /// 儲存文件 /// </summary> /// <param name="document"></param> /// <returns></returns> public WriteConcernResult Save(T document) { return col.Save(document); } /// <summary> /// 驗證集合 /// </summary> /// <returns></returns> public ValidateCollectionResult Validate() { return col.Validate(); } /// <summary> /// 獲取當前表的相關資訊 /// </summary> /// <returns></returns> public MongoCollection<T> GetTableInfo() { //建立資料連線 server = new MongoClient(connString).GetServer(); //獲取指定資料庫 db = server.GetDatabase(dbName); //獲取表 col = db.GetCollection<T>(colName); return col; } #endregion } #region 分頁 /// <summary> /// 分頁 /// </summary> public class PageInfo { private int pageIndex; /// <summary> /// 當前的頁 /// </summary> public int PageIndex { get { return pageIndex; } set { pageIndex = value; } } private int pageSize; /// <summary> /// 每頁的大小 /// </summary> public int PageSize { get { return pageSize; } set { pageSize = value; } } private string[] sort; /// <summary> /// 排序的列名 /// </summary> public string[] Sort { get { return sort; } set { sort = value; } } private Direction direction; /// <summary> /// 排序方向 /// </summary> public Direction Direction { get { return direction; } set { direction = value; } } } /// <summary> /// 排序的方向 /// </summary> public enum Direction { DESC, ASC } #endregion }