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

 

转载于:https://www.cnblogs.com/weschen/p/10563445.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#中使用MongoDB的示例代码有几个部分。首先,你需要引用MongoDB的命名空间,例如"using MongoDB.Driver;"。然后,你需要建立一个MongoDB的客户端和数据库连接。你可以使用连接字符串来指定连接参数,如服务器地址和数据库名称。连接字符串可以通过配置文件读取,也可以直接在代码中指定。接下来,你需要指定要操作的集合名称,获取该集合的引用。你可以使用查询条件来过滤集合中的文档,并使用Find方法获取满足条件的文档列表。最后,你可以遍历文档列表,并输出文档中的字段值。在示例代码中,输出的姓名和电话字段分别通过p["name"]和p["phone"]来获取。示例代码中还展示了一种插入文档的方法,使用InsertOneAsync方法将一个文档插入到集合中。关于连接方式的不同,你可以选择使用连接字符串来建立连接,也可以直接指定服务器地址和数据库名称。但无论使用哪种方式,你都需要确保连接参数的正确性和有效性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [1.C#操作MongoDB](https://blog.csdn.net/qq_34035956/article/details/125716599)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [在C#中使用MongoDB](https://blog.csdn.net/u011301348/article/details/89330590)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值