c# Mongodb


C# API文檔:http://api.mongodb.org/csharp/2.2/html/R_Project_CSharpDriverDocs.htm

驅動文檔:https://docs.mongodb.org/ecosystem/drivers/csharp/

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using MongoDB.Bson;
using MongoDB.Driver;

namespace MES_MonitoringService.Common
{
    /// <summary>
    /// Mongodb操作類
    /// </summary>
    public class MongodbHandler
    {
        /*默認MongoDB參數*/
        /*-------------------------------------------------------------------------------------*/

        public static string MongodbServiceName = Common.ConfigFileHandler.GetAppConfig("MongodbServiceName");
        private static string MongodbDefaultUrl = Common.ConfigFileHandler.GetAppConfig("MongodbURL");
        private static string MongodbDefaultDBName = Common.ConfigFileHandler.GetAppConfig("MongodbName");

        // 定義一個靜態變量來保存類的實例
        private static MongodbHandler uniqueInstance;
        //定義一個標識確保線程同步 
        private static readonly object locker = new object();


        /*構造函數*/
        /*-------------------------------------------------------------------------------------*/

        /// <summary>
        /// mongo連接客戶端
        /// </summary>
        public static MongoClient mc_MongoClient = null;

        /// <summary>
        /// mongo數據庫
        /// </summary>
        public IMongoDatabase mc_MongoDatabase = null;


        /*構造函數*/
        /*-------------------------------------------------------------------------------------*/

        /// <summary>
        /// 定義私有構造函數,使外界不能創建該類實例
        /// </summary>
        private MongodbHandler()
        {
            if (!Common.CommonFunction.ServiceRunning(MongodbServiceName))
            {
                throw new Exception("Mongodb 服務未安裝或未運行,無法連接至Mongodb");
            }

            //client
            mc_MongoClient = new MongoClient(MongodbDefaultUrl);
            //database
            mc_MongoDatabase = mc_MongoClient.GetDatabase(MongodbDefaultDBName);
        }

        /// <summary>
        /// 定義公有方法提供一個全局訪問點,同時你也可以定義公有屬性來提供全局訪問點
        /// </summary>
        /// <returns></returns>
        public static MongodbHandler GetInstance()
        {
            // 當第一個線程運行到這里時,此時會對locker對象 "加鎖",
            // 當第二個線程運行該方法時,首先檢測到locker對象為"加鎖"狀態,該線程就會掛起等待第一個線程解鎖
            // lock語句運行完之后(即線程運行完之后)會對該對象"解鎖"
            // 雙重鎖定只需要一句判斷就可以了
            if (uniqueInstance == null)
            {
                lock (locker)
                {
                    // 如果類的實例不存在則創建,否則直接返回
                    if (uniqueInstance == null)
                    {
                        uniqueInstance = new MongodbHandler();
                    }
                }
            }
            return uniqueInstance;
        }




        /// <summary>
        /// 獲取數據集
        /// </summary>
        /// <param name="collectionName"></param>
        /// <returns></returns>
        public IMongoCollection<BsonDocument> GetCollection(string collectionName)
        {
            return mc_MongoDatabase.GetCollection<BsonDocument>(collectionName);
        }


        /*操作數據*/
        /*-------------------------------------------------------------------------------------*/

        /// <summary>
        /// 數據集插入一條數據
        /// </summary>
        /// <param name="collection"></param>
        /// <param name="newDocument"></param>
        public void InsertOne(IMongoCollection<BsonDocument> collection, BsonDocument newDocument)
        {
            collection.InsertOne(newDocument);
        }

        /// <summary>
        /// 找到所有
        /// </summary>
        /// <param name="collection"></param>
        /// <returns></returns>
        public MongoDB.Driver.Linq.IMongoQueryable FindAll(IMongoCollection<BsonDocument> collection)
        {
            return collection.AsQueryable<BsonDocument>();
        }

        /// <summary>
        /// 找到一條
        /// </summary>
        /// <param name="collection"></param>
        /// <param name="filter"></param>
        /// <returns></returns>
        public IFindFluent<BsonDocument,BsonDocument> Find(IMongoCollection<BsonDocument> collection, FilterDefinition<BsonDocument> filter)
        {            
            return collection.Find(filter);
        }

        /// <summary>
        /// 找到並更新
        /// </summary>
        /// <param name="collection"></param>
        /// <param name="filter"></param>
        /// <param name="update"></param>
        /// <returns></returns>
        public BsonDocument FindOneAndUpdate(IMongoCollection<BsonDocument> collection, FilterDefinition<BsonDocument> filter,UpdateDefinition<BsonDocument> update)
        {
            return collection.FindOneAndUpdate(filter, update);
        }

        /// <summary>
        /// 找到並刪除
        /// </summary>
        /// <param name="collection"></param>
        /// <param name="filter"></param>
        /// <returns></returns>
        public BsonDocument FindOneAndDelete(IMongoCollection<BsonDocument> collection, FilterDefinition<BsonDocument> filter)
        {
            return collection.FindOneAndDelete(filter);
        }
    }
}
封裝類

 

 

查找數據

 

 

更新單個數據

 

 

更新多個字段

在聲明修改條件時,先聲明一個數組,將其中需要設置的值寫入,在需要運行命令時使用Builders<BsonDocument>.Update.Combine()方法進行合並修改方法 

 

計算字段

 

 

參考地址:

https://www.cnblogs.com/knowledgesea/p/5050969.html

https://blog.csdn.net/shiyaru1314/article/details/53672609

https://www.cnblogs.com/axel10/p/8459996.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM